複数のWord文書のフィールドコードオプションをまとめて置換したいことがあった。
フィールドの置換といっても通常の文字列置換とほとんど変わりはない。
置換前に、
| $word.ActiveWindow.View.ShowFieldCodes = $true |
とやってフィールドコードを表示させておけば良いだけだ。
以下のコードは目次のフィールドコードの後ろにブックマーク範囲を指定するオプションを追加している。フィールドコードは通常 Alt + F9 ですべて表示できる。
(とりあえず、単一文書を置換している)
| function Main{ $InputPath = "D:\desktop\test.docx" $word = new-object -comObject "Word.Application" $word.Visible = $false [void]$word.Documents.Open($InputPath) #置換するためフィールドコードを表示しておく $word.ActiveWindow.View.ShowFieldCodes = $true $findText = "\z \u" $ReplaceText = "\z \u \b ブックマーク1" $n = $null $ReplaceAll = 2 #全部置換 $Forward = $true $word.Selection.Find.Execute($FindText,$n,$n,$n,$n, $n,$Forward,$n,$n,$ReplaceText,$ReplaceAll) #全選択しフィールドを最新にする [void]$word.Selection.WholeStory() [void]$word.Selection.Fields.Update() $word.ActiveWindow.View.ShowFieldCodes = $false pause
if($word){ #保存して終了 [void]$word.Application.ActiveDocument.Close() [void]$word.Quit() }
} function Pause { Write-Host "続行するには何かキーを押してください . . ." -NoNewLine [Console]::ReadKey($true) | Out-Null Write-Host } Main |
それほど難しいところはないのだが、Find.Executeメソッドの引数は試行錯誤した結果、とりあえず上記のように最低4つ指定すればよいようだ。
また、フィールドオプションを置換した後、最新にUpdateしているのだが、環境によっては表示が更新されないこともあるようだ。
念のため、印刷前にフィールドを更新するオプションを有効にしたほうが良いと思う。

0 件のコメント:
コメントを投稿