2016-11-17 22 views
1

PowerShellを使用して、Word文書のすべての隠しテキストを削除するスクリプトを作成する必要があります。ここでWord文書内のすべての隠しテキストをプログラムで削除します

は、私がこれまで持っているものです。

$WordDocument = Get-Item "C:\MyWordDocument.docx" 

$word_app = New-Object -ComObject Word.Application 
$word_app.Visible = $false 

$document = $word_app.Documents.Open($WordDocument.FullName) 

$objSelection = $word_app.Selection 
$objSelection.Font.Hidden = $True 

$FindText = "" # search on formatting only (according to MS doc) 
$wdFindContinue = 1 
$ReplaceAll = 2 
$MatchCase = $False 
$MatchWholeWord = $False 
$MatchWildcards = $False 
$MatchSoundsLike = $False 
$MatchAllWordForms = $False 
$Forward = $True 
$Wrap = $wdFindContinue 
$Format = $True # ? 
$ReplaceWith = "" 

$a = $objSelection.Find.Execute($FindText,$MatchCase,$MatchWholeWord, ` 
    $MatchWildcards,$MatchSoundsLike,$MatchAllWordForms,$Forward,` 
    $Wrap,$Format,$ReplaceWith,$ReplaceAll) 
$document.Save() 
$document.Close() 

$word_app.Quit() 

それが動作しない、と私はその理由を把握することはできません。

+0

こんにちはジェロームは、あなたがFind.Executeメソッド呼び出しに$を割り当てています。 MSのドキュメント[リンク](https://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.find.execute.aspx)から、戻り値の型がTrueまたはFalseであることが示されます。 $は真か偽ですか?本当か偽かを知りたいのでない限り、私はあなたに$ aが必要だとは思わない。 $ aを削除すると、正しく実行されますか?ありがとう、TIm。 –

+0

実際には$ falseを返します...私は理由を理解していません。 –

+0

$ objSelection.Find.Execute($ FindText、$ MatchCase、$ MatchWholeWord、$ MatchSoundsLike、$ MatchAllWordForms、$ Forward、$ Wrap、$ Format、$ ReplaceWith、$ ReplaceAll) 上記?むしろ$ a =の前に。 –

答えて

1

間違っているのは、検索フィルタを設定して隠れたテキストを見つけることです。代わりに$objSelection.Font.Hidden = $Trueの(これは実際には、現在選択されているテキストを隠す)あなたは$objSelection.Findオブジェクトのプロパティを設定する必要があります。

$objSelection.Find.Font.Hidden = $True 
関連する問題