Hey, Scripting Guy!

Hey, Scripting Guy!

TechNet コラムへようこそ。このコラムでは、よく寄せられるシステム管理スクリプトに関する質問に Scripting Guys がお答えします。システム管理スクリプトについて質問がある場合は、scripter@microsoft.com (英語のみ) までお送りください。すべての質問に回答することはできないかもしれませんが、可能な限り対応いたします。

Hey, Scripting Guy! アーカイブも忘れずにチェックしてください。

今日の質問 : Word 文書に複数のファイルを挿入する際に、各ファイル間に改ページを挿入する方法はありますか


Word 文書に複数のファイルを挿入する際に、各ファイル間に改ページを挿入する方法はありますか

Q

Scripting Guy さん、よろしくお願いします。5 月 3 日に、Microsoft Word で複数のファイルをマージする方法が紹介されていました。ファイルをマージする際に、各ファイル間に改ページを挿入する方法はありますか。

-- CE

A

CE さん、こんにちは。最初にこのメールを読んだとき、2005 年 5 月 3 日には複数のファイルをマージする方法を紹介したなんてありえないと思いました。それは、1 つの Microsoft Word 文書に複数のファイルをマージするという主題が、このコラムで取り組んだトピックではないと思ったからではありません。それよりも、ほとんどの日は私たちは何も仕事をしていないため、なぜ 5 月 3 日が例外だったのかわからなかっただけです。しかし、あなたが正しいことがわかりました。私たちは、実際に 5 月 3 日に仕事をしました。何を考えていたのかは覚えていませんが。

間違いなくあなたが思い出したとおり (皆さんはすべての「Hey, Scripting Guy!」コラムを本当によく記憶していますね)、最初のコラムでは、C:\Scripts\Archive フォルダ内のすべてのファイルを Microsoft Word 文書にインポートするスクリプトを使用しました。スクリプトは申し分のないものでしたが、1 つのファイルの終わりと次のファイルの始まりの間に段落改行を入力しただけでした。言うまでもありませんが、 1 つのファイルがどこで終わり、次のファイルがどこから始まるかを知ることが重要な場合は、段落改行だけではたいして役にたちません。そのとおりです、CE さん。ファイル間に改ページを挿入する方が適切な手順であることは明らかです。その方法は次のとおりです。

Const wdPageBreak = 7 

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection

Set FileList = objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_Directory.Name='C:\Scripts\Archive'} Where " _
        & "ResultClass = CIM_DataFile")

For Each objFile in FileList
    objSelection.InsertFile(objFile.Name)
    objSelection.InsertBreak(wdPageBreak)
Next

大部分は、複数のファイルを挿入するためのスクリプトを単に複製したものです。そのため、ここではコードを 1 行ずつ詳しく検討しません。詳細については、元のコラムを参照してください。代わりに、2 つの変更点に注目しています。

このスクリプトでは、最初に定数 wdPageBreak を定義し、値を 7 に設定します。この定数を使用して、InsertBreak メソッドを呼び出すときに改ページを挿入するように Word に指示します。ご存知かもしれませんが、Word では、段区切り、文字列の折り返しの区切り、さまざまなセクション区切りなど、他の種類の区切りを挿入できます。

ローカル コンピュータの WMI サービスにバインドするコードを作成し、新しい Microsoft Word 文書を作成します。次に、Associators Of クエリを使用して C:\Scripts\Archive フォルダ内にあるすべてのファイルのコレクションを取得します。コレクションを取得したら、すべてのファイルを挿入する InsertFile メソッドを使用して、For Each ループを設定してコレクション内を順番に処理します。

元のスクリプトと新しいスクリプトにはもう 1 つの相違点があります。最初のスクリプトでは、InsertFile メソッドを呼び出してから、TypeParagraph() を使用してキーボードの Enter キーを押す操作をシミュレートしていました。今回の For Each ループは次のようになります。

For Each objFile in FileList
    objSelection.InsertFile(objFile.Name)
    objSelection.InsertBreak(wdPageBreak)
Next

ご覧のとおり、最初のファイルを挿入した後に、InsertBreak メソッドを呼び出して改ページの挿入を指定します。この改ページを挿入して初めて、コレクション内の次のファイルをループして挿入します。最終結果を見てみましょう。文書にインポートした各ファイルの間に改ページが挿入されます。

ええ、かなり良くなりました。今日、多少の仕事をしたかどうかを考えてみたところ、もう少し仕事をした方がいいようです。次の改良されたスクリプトは、各ファイル間に改ページが挿入され、各改ページの後に 14 ポイントの Arial フォント (それ以外のテキストは 10 ポイントの Arial フォント) でファイル パスが入力されます。スクリプトは次のようになります。

Const wdPageBreak = 7 

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection

Set FileList = objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_Directory.Name='C:\Scripts\Archive'} Where " _
        & "ResultClass = CIM_DataFile")

objSelection.Font.Name = "Arial"

For Each objFile in FileList
    objSelection.Font.Size = "14"
    objSelection.TypeText objFile.Name
    objSelection.TypeParagraph()
    objSelection.Font.Size = "10"
    objSelection.InsertFile(objFile.Name)
    objSelection.InsertBreak(wdPageBreak)
Next

注 : Word 文書でのテキストの書式設定に関する詳細については、毎週更新される「Office Space」コラムで紹介された Microsoft Word の記事を参照してください。

なかなか楽しかったですね。気分転換に、今後は毎年 5 月 3 日に少し仕事をしましょうか。

いや、やめておきましょう。


関連情報

Hey, Scripting Guy!- アーカイブもチェックしてください。

ページのトップへページのトップへ