尝试使用Powershell删除Microsoft Word语法检查器标记的所有句子

时间:2011-12-21 22:40:50

标签: powershell ms-word ms-office

我正在尝试使用Powershell删除Microsoft Word Grammar Checker标记的所有句子。我很远看Office Word 2010 Word对象模型。我能够在文档中找到下一个语法错误的句子,并能够删除它。我现在唯一的问题是遍历文档并删除Microsoft Word Grammar Checker标记的所有句子。这是我到目前为止所拥有的。


    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循环中进行有效的布尔测试,检查文档是否还有语法错误。如果我不这样做,那么即使没有语法错误,$ wdGoToNext也会继续运行。如果找不到标记有语法错误的句子,它会删除第一个句子的字母。有帮助吗?我用它作为参考。

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

2 个答案:

答案 0 :(得分:0)

问题是您的$ docSelection未更新。你要做的是删除一个句子,然后一次又一次地从同一个选择中删除同一个句子。每次删除后都需要更新$ docSelection,如下所示:

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

它为我删除了文档中的所有内容,但至少它现在已经循环

答案 1 :(得分:0)

刚刚结束解决它。找到一个ProofreadingError对象,其中包含一个名为Count的属性,该属性返回GrammaticalErrors的数量。 (msdn.microsoft.com/en-us/library/aa213190(v=office.11​​).aspx)<

所以我将While循环测试设置为

$errorCount = $doc.GrammaticalErrors.Count

while ($errorCount -ne 0)