2010年11月4日木曜日

◆複数のWord文書を纏めて1つにする。

WordにはもともとIncludeTextフィールドを使ったリンク挿入という機能がある。
しかし、こいつはかな~り怪しい機能で、複数文書をリンクするとほとんどまともに機能してくれない。(特に他のフィールドとの相性が非常に悪い)

そこで、リンクするのではなく文書をそのまま取り込むことにした。
もとの文書に修正が入ってなんども纏めるのは面倒なのでスクリプトを使って纏めてみる。

$InputPath = "D:\desktop\*.docx"
$OutputPath = "D:\desktop\まとめ.docx"
$targetDocs = Get-ChildItem -Path $inputPath -Exclude "まとめ.docx"
$word = new-object -comObject "Word.Application"

$word.Visible = $false

#まとめを開く&中身をクリア
[void]$word.Documents.Open($OutputPath)
[void]$word.Selection.WholeStory() #全選択
[void]$word.Selection.Delete(1,1)  #クリア
 
#表紙を取り込む
[void]$word.Selection.InsertFile("D:\desktop\common\表紙.docx")

foreach($doc in $targetDocs){
    #奇数ページから新しいセクション
    [void]$word.Selection.InsertBreak(5)
    #取り込み
    [void]$word.Selection.InsertFile($doc.fullname)
}

#全選択しフィールドを最新にする
[void]$word.Selection.WholeStory()
[void]$word.Selection.Fields.Update()

[void]$word.Application.ActiveDocument.Close()

$word.Quit()

出力ファイルは予め存在している前提で纏める前に中身をクリアしている。

これで、大きなマニュアルなどを章ごとに分けて作成することができる。
(サブ文書なんて機能もあるけどこれも今ひとつ信用できない)

0 件のコメント:

コメントを投稿