0

我正在尝试自动生成一组 80 多个文本表,每个表在Microsoft Word 2013.

这些表具有以下共同特征:

  1. 每个表格上方的文本标题,有几个插入罐头文本的位置。
  2. 表格中的单个标题行,具有粗的顶部和底部边框。
  3. N 行数据,每行 5 列,其中 N 可以因每个表而异。
  4. 数据来源于一些空格分隔的文本文件,带有一个标题行。

我的想法是将示例表保存为Word XML格式文档,然后BASH使用Cygwin. 是的,我知道与 using 相比,这有点迂回VBA,但我已经知道如何在其中执行脚本方面的工作,因为我对生成表格知之甚少,VBA而且我的初步阅读表明这将是一条更困难的途径明智地学习,而不是简单地理解XML格式并解析它。

无论如何,Word XML我得到的文件相当……冗长。包含数据的表11 rows占用91,100+字符。深入研究我发现大部分问题是缺乏通用格式。

这些字符中的大约~44,000一个专门用于包含字体等内容的关闭 XML 的巨大块。XML 设置的标题块占用大约~5,000. 我将不理会这些部分,因为它显然很复杂,并且不会真正妨碍我的主要目标。

剩下~42,000的字符值是XML,它们都专用于一个表,在这种情况下12 rows5 columns所有单元格文本条目都小于10 characters长。

一行中的单个条目的示例是:

<w:tc><w:tcPr><w:tcW w:w="602" w:type="pct"/><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="00B54027" w:rsidRPr="008D2D25" w:rsidRDefault="00B54027" w:rsidP="000C5234"><w:pPr><w:rPr><w:rFonts w:ascii="Times New Roman" w:eastAsia="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/></w:rPr></w:pPr><w:r w:rsidRPr="008D2D25"><w:rPr><w:rFonts w:ascii="Times New Roman" w:eastAsia="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/></w:rPr><w:t>340</w:t></w:r></w:p></w:tc>

啊哈,原来如此500+ characters。所以12 rows x 5 cells x ~500 characters per cell = 30,000 characters......添加额外的行格式等,剩下的就是你了。

根据我对“ Running (aka -ing) with Word ”的阅读,我对语法有了基本的了解,并且知道我希望如何精简表格条目。

我的目标是做这样的事情:

<w:tr>
   <w:tc>
      <w:p>
         <w:r>
            <w:t>
               ###
            </w:t>
         </w:r>
       </w:p>
   </w:tc>
   <w:tc>
      <w:p>
         <w:r>
            <w:t>
               ###.##(#)
            </w:t>
         </w:r>
       </w:p>
   </w:tc>
   <w:tc>
      <w:p>
         <w:r>
            <w:t>
               #.###(#)
            </w:t>
         </w:r>
       </w:p>
   </w:tc>
   <w:tc>
      <w:p>
         <w:r>
            <w:t>
               ##.##(#)
            </w:t>
         </w:r>
       </w:p>
   </w:tc>
   <w:tc>
      <w:p>
         <w:r>
            <w:t>
               ##.##(#)
            </w:t>
         </w:r>
       </w:p>
   </w:tc>
</w:tr>

然后将格式提升到更高级别,因为其中大部分是共享的。即我所有的文字都是Times New Roman,大小12,垂直center对齐,水平right对齐。

我的问题是:

  1. 有没有办法设置一种格式(即<w:pPr><w:rPr><w:rFonts w:ascii="Times New Roman" w:eastAsia="Times New Roman" w:hAnsi="Times New Roman" w:cs="Times New Roman"/></w:rPr></w:pPr>),这样就字体而言,它适用于整个表格,而不必在每次开始运行文本时重复它?
  2. 有没有办法拉出宽度(即<w:tcPr><w:tcW w:w="602" w:type="pct"/><w:vAlign w:val="center"/></w:tcPr>)以应用于列级别,所以我不必为每一行的单元格重新定义它,当给定列中的表格单元格都应该有一个一致的宽度时?
  3. 文档中可以看出rsidR//是rsidRPrrsidRDefault修订相关的标识符......我认为在我的自动生成的文档中并没有太大的意义。从标签<w:p>中删除这些 id 设置是否有缺点?<w:r>
  4. (可能是最重要的问题)这在 VBA 中会容易得多吗?

关于#4,我不是要 VBA 代码,只是一般意义上是否插入罐头文本标题、插入新表格、读取任意数量的空格分隔数据行以填充表格选项卡单元格,适当调整表格大小,并重复上述过程 80 次以上,都会有任何严重的障碍/障碍。

4

0 回答 0