2017-09-04 2 views
2

1つの文字列をワードファイルの別の文字列に置き換えるPowerShellスクリプトを作成しようとしています。私は500単語以上のテンプレートとファイルを更新する必要がありますので、手作業で作成する必要はありません。 1つの問題は、フッターやヘッダーにテキストを見つけることができないということです。なぜなら、それらはすべて個別であり、画像付きの表であるからです。私は、通常の「本文」テキストでテキストを見つけることができますが、今はそれを置き換えていません。ここに私のコードを見つけることです。Wordファイルのヘッダー、フッター、および通常のテキスト内の特定のテキストを置き換えます。

$path = "C:\Users\BambergerSv\Desktop\PS\Vorlagen" 
$files = Get-Childitem $path -Include *dotm, *docx, *.dot, *.doc, *.DOT, *DOTM, *.DOCX, *.DOC -Recurse | 
     Where-Object { !($_.PSIsContainer) } 
$application = New-Object -ComObject Word.Application 
$application.Visible = $true 
$findtext = "www.subdomain.domain.com" 

function getStringMatch { 
    foreach ($file In $files) { 
     #Write-Host $file.FullName 
     $document = $application.Documents.Open($file.FullName, $false, $true) 
     if ($document.Content.Text -match $findtext) { 
      Write-Host "found text in file " $file.FullName "`n" 
     } 
     try { 
      $application.Documents.Close() 
     } catch { 
      continue 
      Write-Host $file.FullName "is a read only file" #if it is write protected because of the makros 
     } 
    } 
    $application.Quit() 
} 

getStringMatch 

答えて

2

私はインターネットで検索しました。この質問に対する回答が見つかりました。

まず、VBAを理解する必要があります。 MS WORDに下記のマクロを書き込んで保存してください。

上記のマクロがMS WORDに追加された後、Powershellにアクセスして以下のコードを実行します。

$word = New-Object -ComObject Word.Application 
$word.visible=$false 
$files = Get-ChildItem "C:\Users\Ali\Desktop\Test" -Filter *.docx 

$find=[ref]"Hello" 
$replace=[ref]"Hi" 


for ($i=0; $i -lt $files.Count; $i++) { 
    $filename = $files[$i].FullName 
    $doc = $word.Documents.Open($filename) 

    $word.Run("CustomReplace",$find,$replace) 
    $doc.Save() 
    $doc.close() 
    } 

$word.quit() 
関連する問題