Использование Selection.Find в Microsoft.Office.Interop.Word для поиска отслеженных изменений в документе - PullRequest
0 голосов
/ 16 апреля 2009

В настоящее время я использую приведенный ниже код в приложении VB.Net, чтобы найти конкретный текст в документе Word. Текст окружен символами, представленными символами в выражении .Text. Код ниже работает нормально. Теперь проблема в том, что иногда нужный текст в документе помечается для удаления и отображается как отслеженное изменение в документе. Я хотел бы найти только нужный текст, который НЕ был помечен для удаления. Кто-нибудь знает способ определить, является ли найденный текст удалением?

    xSelection.MoveStart(Word.WdUnits.wdStory)
    xSelection.Find.ClearFormatting()
    xSelection.Find.Replacement.ClearFormatting()
    With xSelection.Find
        .Text = ChrW(65000) & "( \[*)" & ChrW(65001)
        .Replacement.Text = ""
        .Forward = True
        .Wrap = Word.WdFindWrap.wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchFuzzy = False
        .MatchWildcards = True
    End With
    xSelection.Find.Execute(Replace:=Word.WdReplace.wdReplaceNone)

    Do While xSelection.Find.Found
        ........Execute additional code here
    Loop

Ответы [ 3 ]

0 голосов
/ 24 апреля 2009

Я закончил цикл каждой ревизии и изменил цвет шрифта удаленных ревизий, чтобы отличать их от не удаленных комментариев следующим образом:

    For Each xRevision In theDoc.Revisions
        If xRevision.Type = Word.WdRevisionType.wdRevisionDelete Then
            xRevision.Range.Font.Color = Word.WdColor.wdColorBlack
        End If
    Next

Тогда я могу выполнять поиск и обрабатывать найденные комментарии по-разному в зависимости от цвета их шрифта:

    xSelection.MoveStart(Word.WdUnits.wdStory)
    xSelection.Find.ClearFormatting()
    xSelection.Find.Replacement.ClearFormatting()
    With xSelection.Find
        .Text = ChrW(65000) & "( \[*)" & ChrW(65001)
        .Replacement.Text = ""
        .Forward = True
        .Wrap = Word.WdFindWrap.wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchFuzzy = False
        .MatchWildcards = True
    End With
    xSelection.Find.Execute(Replace:=Word.WdReplace.wdReplaceNone)

    Do While xSelection.Find.Found
        If xSelection.Font.Color = Word.WdColor.wdColorAutomatic Then
            .....
        End If
        xSelection.Find.Execute()
    Loop
0 голосов
/ 09 сентября 2014

Попробуйте отключить отображение ревизий перед поиском или обработкой документа Word:

document.ShowRevisions = false;

Сохраняет отслеживание изменений в документе, если оно есть, но позволяет вам видеть и справляться только с новейшим контентом, например любые удаления и т.д ..

0 голосов
/ 17 апреля 2009

Для меня это работает, чтобы установить вид ревизии в финал перед поиском. Затем будет найден только текст, видимый в окончательной редакции (вы можете сделать резервную копию предыдущего значения и восстановить представление после завершения поиска):

ActiveDocument.Windows(1).View.RevisionsView = wdRevisionsViewFinal

Полный код:

' set view to show final document revision
' to prevent deleted text from being found
Word.WdRevisionsView revisionsView = xSelection.Document.Windows(1).View.RevisionsView
xSelection.Document.Windows(1).View.RevisionsView = Word.WdRevisionsView.wdRevisionsViewFinal

xSelection.MoveStart(Word.WdUnits.wdStory)
xSelection.Find.ClearFormatting()
xSelection.Find.Replacement.ClearFormatting()
With xSelection.Find
    .Text = ChrW(65000) & "( \[*)" & ChrW(65001)
    .Replacement.Text = ""
    .Forward = True
    .Wrap = Word.WdFindWrap.wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchFuzzy = False
    .MatchWildcards = True
End With
xSelection.Find.Execute(Replace:=Word.WdReplace.wdReplaceNone)

Do While xSelection.Find.Found
    ........Execute additional code here
Loop

' restore previous view
xSelection.Document.Windows(1).View.RevisionsView = revisionsView 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...