我正在尝试自动生成一组 80 多个文本表,每个表在Microsoft Word 2013
.
这些表具有以下共同特征:
- 每个表格上方的文本标题,有几个插入罐头文本的位置。
- 表格中的单个标题行,具有粗的顶部和底部边框。
- N 行数据,每行 5 列,其中 N 可以因每个表而异。
- 数据来源于一些空格分隔的文本文件,带有一个标题行。
我的想法是将示例表保存为Word XML
格式文档,然后BASH
使用Cygwin
. 是的,我知道与 using 相比,这有点迂回VBA
,但我已经知道如何在其中执行脚本方面的工作,因为我对生成表格知之甚少,VBA
而且我的初步阅读表明这将是一条更困难的途径明智地学习,而不是简单地理解XML
格式并解析它。
无论如何,Word XML
我得到的文件相当……冗长。包含数据的表11 rows
占用91,100+
字符。深入研究我发现大部分问题是缺乏通用格式。
这些字符中的大约~44,000
一个专门用于包含字体等内容的关闭 XML 的巨大块。XML 设置的标题块占用大约~5,000
. 我将不理会这些部分,因为它显然很复杂,并且不会真正妨碍我的主要目标。
剩下~42,000
的字符值是XML
,它们都专用于一个表,在这种情况下12 rows
,5 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
对齐。
我的问题是:
- 有没有办法设置一种格式(即
<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:tcPr><w:tcW w:w="602" w:type="pct"/><w:vAlign w:val="center"/></w:tcPr>
)以应用于列级别,所以我不必为每一行的单元格重新定义它,当给定列中的表格单元格都应该有一个一致的宽度时? - 从文档中可以看出
rsidR
//是rsidRPr
与rsidRDefault
修订相关的标识符......我认为在我的自动生成的文档中并没有太大的意义。从标签<w:p>
中删除这些 id 设置是否有缺点?<w:r>
- (可能是最重要的问题)这在 VBA 中会容易得多吗?
关于#4,我不是要 VBA 代码,只是一般意义上是否插入罐头文本标题、插入新表格、读取任意数量的空格分隔数据行以填充表格选项卡单元格,适当调整表格大小,并重复上述过程 80 次以上,都会有任何严重的障碍/障碍。