我正在尝试使用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)
答案 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)