VBA для копирования и обработки абзацев и таблиц из одного документа Word в другой - PullRequest
0 голосов
/ 18 марта 2020

Мой сценарий заключается в том, что я хочу скопировать и очистить НЕКОТОРЫЙ контент из Word doc1 и сохранить очищенный контент (с новыми назначенными стилями) в doc2. Я знаю, как l oop над абзацами, распознавать те, которые мне нужны, и копировать их в doc2 и как назначать там новые стили.

Я также могу l oop поверх doc1.Tables коллекции и копии таблиц.

Но я не могу понять, как разместить таблицы doc1 в соответствующем месте в doc2. Я хотел бы использовать al oop, подобный этому, который сохранял бы относительные положения абзацев и таблиц:

Foreach (object o in doc1) 
   if (o.type = paragraph) then
      if (I like the paragraph) then
         copy the paragraph to doc2
      endif
   else if (o.type = table) then
      if (I like the table for copying) then
         copy the table to doc2
      end if
   endif
next

Но я не знаю, является ли этот стиль l oop (циклический просмотр объектов) возможно или разумно в VBA. Я не могу найти никаких примеров этого. Любой другой подход требует некоторого способа связать таблицу с некоторой позицией, закладкой, диапазоном или текстом в последовательности абзацев в документе. Но так как в настоящее время я копирую только часть текста doc1, я не мог легко скопировать любые таблицы, к которым привязаны.

Я почти на грани копирования всей истории doc1 в doc2 а затем удаляя ненужные мне части и повторно создавая детали, которые мне нужны, все на месте.

Можно ли использовать тип l oop, показанный выше, для последовательного копирования объектов (абзацы, таблицы , images, et c.) с doc1 на doc2? Если да, то как выглядит код объектного тестирования? (if o.type is type.paragraph)? Должен ли я даже попробовать этот подход, или это пустая трата времени? Спасибо

1 Ответ

0 голосов
/ 21 марта 2020

Если вы зацикливаете абзацы, проверьте, находится ли абзац в таблице. Это позволит вам делать все по порядку, что касается таблиц

Foreach (object o in doc1) 
   if (o.type = paragraph) then
      if (paragraph.Range.Information(wdWithinTable) Then
         do something with the entire table
      elseif (I like the paragraph) then
         copy the paragraph to doc2
      endif
next

Обратите внимание, однако, что действительно нет надежного способа обработки всех возможных объектов Word с использованием объектной модели , В частности, графические объекты, отформатированные с переносом текста (в отличие от встроенных), очень сложны.

Более надежный способ работы с содержимым документа в порядке «вещей» - это использование формата файла Word Open XML, в котором доступен фактический базовый контент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...