2017-01-07 190 views
0

Word文書(.docx)のヘッダー内にあるテキストボックス内の一部のテキストを検索して置換するためにPowershellを使用しようとしています。私はヘッダーの外側のテキストでは動作させることができましたが、内部ではできませんでした。私はテキストボックスの内容に正しくアクセスしていないので失敗していると思うので、最後の行に(終了して保存する前に)テキストが何かを確認するために追加しましたが、私の3つの項目ヘッダ。これは、PowerShellを使用して私の最初の時間であり、私はおそらくより多くの時間、これを学習し、私はそれを使用して保存されますよりも、それを書くことを費やしていると思う...Powershellを使用してWord文書のヘッダー内のテキストボックスを検索して置き換えます。

スクリプトの関連するスニペットは以下の通りです:

$word = New-Object -COM "Word.Application"; 
$word.Visible = $false; 
$doc = $word.Documents.Open($FullPath); 
$selection = $word.Selection; 
$section = $doc.sections.item(1); 
$header = $section.headers.Item(3); 
$FindText = "Cnnn"; 
$MatchCase = $False; 
$MatchWholeWord = $False; 
$MatchWildcards = $False; 
$MatchSoundsLike = $False; 
$MatchAllWordForms = $False; 
$Forward = $True; 
$wdFindContinue = 1; 
$Wrap = $wdFindContinue; 
$Format = $False; 
$wdReplaceNone = 0; 
$ReplaceAll = 2; 
$ReplaceWith = "C" + $newString; 
$a = $header.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ` 
$MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
$Wrap,$Format,$ReplaceWith, $ReplaceAll); 

Write-Host ("Header is: " + $header.Text); 

$doc.Save(); 
$word.Quit(); 
+0

なぜ '$ section.headers.Item(3)'ですか?それは 'Item(1)'ではないでしょうか?あなたが探しているヘッダはどのページですか? –

+0

こんにちは、@マティアス申し訳ありませんが、それは1ページにあります。実際はすべてのページが実際には、私はちょうど別のものを試していました。私はItem(1)を持っていたときにヘッダーテキストをスラッシュとして印刷しました - "/" – mJ222398

答えて

0

オブジェクトには、TextBoxまたはテキストを含むshapeから検索を適用する必要があります。 あなたは次のようなものを試すことができます:

If ($header.ShapeRange.Count) { 
    ForEach ($shp in $header.ShapeRange) { 
    If ($shp.TextFrame.HasText) { 
     $obj = $shp.TextFrame.TextRange.Find 
     $a = $obj.Execute($FindText,$MatchCase,$MatchWholeWord,` 
      $MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
      $Wrap,$Format,$ReplaceWith,$ReplaceAll) 
    } 
    } 
} 
関連する問題