首页 > 解决方案 > VBA 将段落和表格从一个 Word 文档复制和处理到另一个

问题描述

我的场景是我想从 Word doc1 复制和清理一些内容,并将经过清理的内容(具有新分配的样式)存储在 doc2 中。我知道如何遍历段落,识别我想要的段落,并将它们复制到 doc2 以及如何在那里分配新样式。

我还可以遍历 doc1.Tables 集合和复制表。

但我不知道如何将 doc1 表放在 doc2 中的适当位置。我很想使用这样的循环来保持段落和表格的相对位置一致:

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

但我不知道这种循环样式(循环对象)在 VBA 中是否可行或合理。我找不到任何例子。任何其他方法都需要某种方式将表格与文档中段落序列中的某个位置、书签、范围或文本相关联。但由于我目前只复制部分 doc1 文本,因此我无法轻松复制表格所锚定的任何内容。

我几乎要将 doc1 的“全部”复制到 doc2,然后删除我不需要的部分并重新设计我确实需要的部分,全部原位。

是否可以使用上面显示的循环将内容(段落、表格、图像等)从 doc1 顺序复制到 doc2?如果是这样,对象测试代码是什么样的?( if o.type is type.paragraph)? 我是否应该尝试这种方法,还是浪费时间?谢谢

标签: vbams-word

解决方案


如果您正在循环段落,请检查该段落是否在表格中。就桌子而言,这将使您按顺序做事

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 文件格式,其中实际的底层内容可用。


推荐阅读