Как я могу сравнить объекты Word Interop на предмет «ссылочного равенства» И определить коллекцию или родительский объект, которому, скажем, принадлежит абзац?

Я хотел бы иметь возможность:

  1. сравнивать COM-прокси Word Interop на основе «эталонного равенства»; и
  2. сопоставить конкретный объект (скажем, абзац) с коллекцией, из которой он происходит, ИЛИ по крайней мере
  3. определить, принадлежат ли два абзаца к одному и тому же разделу, а какой из них предшествует предыдущему

Почему Я хочу сделать это? Я пытаюсь создать надстройку Word, которая действует аналогично проверке орфографии в том смысле, что она работает в фоновом режиме (под фоном я имею в виду регулярное кражу времени из основного потока Word с помощью SendMessage) и точно сканирует документ. текст «жетоны». Я хочу иметь возможность хранить коллекцию токенов и обновлять их по мере изменения документа. Конкретный пример этого: если пользователь редактирует данный абзац, я хочу повторно отсканировать абзац и обновить свою структуру данных, которая указывает на этот абзац. Если нет способа сопоставить абзац, в котором редактировал пользователь (т.е. абзац, в котором начинается диапазон выбора), и абзац, который я «сохранил» в структуре данных, я не могу этого сделать.


Пример кода для пункта № 1, выше

Если я напишу следующий код VBA:

Dim Para1 As Paragraph
Dim Para2a As Paragraph
Dim Para2b As Paragraph
Set Para1 = ActiveDocument.Paragraphs(1)
Set Para2a = Para1.Next
Set Para2b = Para1.Next.Next.Previous
If Para2a Is Para2b Then
    Debug.Print ("Para2a Is Para2b")
Else
    Debug.Print ("Para2a Is Not Para2b")
End If

Тогда я получаю результат:

"Para2a Is Not Para2b"

Что, возможно, физически верно (разные прокси COM), но не логически. Мне нужно сравнить эти абзацы и определить, являются ли они логически одним и тем же основным абзацем.

(Я планирую написать надстройку на C #, но приведенный выше код VBA демонстрирует тип проблемы, которую мне нужно преодолеть, прежде чем писать слишком много кода).

Надеюсь, что по пунктам 2 и 3 выше они не требуют пояснений.Скажем, у меня есть ссылка на абзац (прокси-сервер взаимодействия). Я хочу выяснить, «где» это в документе. Принадлежит ли он к разделу 1? Это в нижнем колонтитуле? Без этой возможности все, что я могу разумно сделать, чтобы понять, откуда что происходит, - это повторно сканировать весь документ при каждом изменении, что, конечно, абсурдно неэффективно и не будет достаточно своевременным для пользователя приложения.

Приветствую любые мысли! Я буду рад размещать дополнительную информацию по мере необходимости.

7
задан Drew Gaynor 20 December 2011 в 18:36
поделиться