Попытка использовать Powershell для удаления всех предложений, помеченных средством проверки грамматики Microsoft Word - PullRequest
0 голосов
/ 22 декабря 2011

Я пытаюсь использовать Powershell для удаления всех предложений, помеченных средством проверки грамматики Microsoft Word. Я довольно далеко изучил объектную модель Word в Office Word 2010. Я смог найти следующее грамматическое неправильное предложение в документе и смог удалить его. Моя единственная проблема сейчас состоит в том, чтобы пройтись по документу и удалить все предложения, помеченные средством проверки грамматики 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, который проверяет, нет ли в документе больше грамматических ошибок. Если я этого не сделаю, то $ wdGoToNext будет продолжать работать, даже если нет грамматических ошибок. Он удаляет букву первого предложения, если не может найти предложение, помеченное грамматической ошибкой. Любая помощь? Я использую это как ссылку.

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

Ответы [ 2 ]

0 голосов
/ 26 декабря 2011

Закончилось, решив это немного назад. Найден объект ProofreadingError, который содержит свойство Count, которое возвращает число GrammaticErrors. (msdn.microsoft.com/en-us/library/aa213190(v=office.11).aspx)

Таким образом, я установил тест «Пока цикл» на

$errorCount = $doc.GrammaticalErrors.Count

while ($errorCount -ne 0)

0 голосов
/ 22 декабря 2011

Проблема в том, что ваш $ docSelection не обновляется. То, что вы делаете, это удаляете предложение, а затем снова и снова и снова удаляете одно и то же предложение из того же выбора. Вам нужно обновлять $ docSelection после каждого удаления, например:

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

Он удалил все из документа для меня, но, по крайней мере, теперь он зацикливается

...