2011-12-21 9 views
0

Microsoft Word文法検査プログラムによってフラグが付けられたすべての文章をPowershellを使用して削除しようとしています。 Office Word 2010のWord Object Modelをかなり見てきました。私は次の文法上の間違った文章を文書で見つけ出し、それを削除することができました。私の唯一の問題は、文書をループして、Microsoft Word文法チェッカーでフラグを立てたすべての文を削除することです。ここに私がこれまで持っているものがあります。Powershellを使用してMicrosoft Word文章校正プログラムによってフラグが付けられたすべての文章を削除しようとしています

 

    cd c:\testruns\ 
     $docPath = "" + $(Get-Location) + "\Grammar\document.docx" 
     $Word = New-Object -ComObject Word.Application 
     $Word.Visible = $True 
     $doc = $Word.documents.open($docPath) 
     $docSelection = $Word.selection 

     # Word Method Constants 
     $wdGoToSpellingError = 13 
     $wdGoToGrammaticalError = 14 
     $wdGoToFirst = 1 
     $wdGoToLast = -1 
     $wdGoToNext = 2 

     while (!$AnymoreGrammar) { 
      [void]$docSelection.GoTo($wdGoToGrammaticalError, $wdGoToNext).delete() 
     } 

もちろん、変数$ AnymoreGrammarは、私が見つけたいブール変数の疑似コードです。私はwhileループに文法上の誤りがないかどうかを調べる有効なbooleanテストが必要です。私がしなければ、$ wdGoToNextよりも文法上の誤りがなくても継続します。文法上の誤りがある文が見つからない場合、最初の文の文字を削除します。どんな助け?私はこれを参考にしています。

(http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word.wdgotoitem.aspx)

答えて

0

をループしています。 GrammaticalErrorsの数を返すCountという名前のProofreadingErrorオブジェクトが見つかりました。 (msdn.microsoft.com/en-us/library/aa213190(v=office.11​​).aspx)

だから私は

$errorCount = $doc.GrammaticalErrors.Count

while ($errorCount -ne 0)

にWhileループテストを設定
0

問題が$ docSelectionが更新されないということです。あなたがしていることは、文を削除してから、まったく同じ選択から同じ文を何度も何度も何度も何度も削除することです。あなたはこのように、各削除後の$ docSelectionを更新する必要があります。

 while (!$AnymoreGrammar) {  
     $docSelection.GoTo($wdGoToGrammaticalError, $wdGoToNext).delete() 
     $docSelection = $Word.selection 
    } 

それは私のためにドキュメントからすべてを削除しますが、少なくともそれは今少し前にそれを解決することになった

関連する問題