0

我正在使用 Velocity 和 XDocReport 从模板生成 Word (docx) 文档。我正在做的一件事是使用此处显示的技术创建包含合并到模板中的数据的表: https ://code.google.com/p/xdocreport/wiki/DocxReportingJavaMainListFieldAdvancedTable ,带有前行和后行。该模板有一个数据行,在 foreach 循环中重复。这一切都完美无缺。

表中的数据列之一包含数字。我想在模板中的表格中添加第二行,其中将包含一个 Word 表格公式(请参阅http://office.microsoft.com/en-us/word-help/use-a-formula-in-a -word-table-HA102329800.aspx#_Toc281293381 ),例如 SUM(ABOVE),用于求和的列。我希望在生成文档时,它会自动汇总 Velocity/XDocReport 添加的所有数据行。

不幸的是,这不起作用。有两个问题。

(1) 当我包含公式时,文档完全生成,但是当我打开文件时,我得到这个错误:“We're sorry. We can't open... because we found a problem. 详情. 意外的输入结束。” 似乎当您在公式中包含格式时,这会导致问题并且不会生成完整的文档。

当我通过将它们转换为 ZIP 文件并在文本编辑器中打开 document.xml 来打开工作和非工作文档时,我可以看到非工作 document.xml 文件不是一个完整的 XML 文件,而是在总和(上)行:

<w:instrText xml:space="preserve"> =SUM(ABOVE)

而在我稍后添加公式的地方工作的 word 文件具有完整的 XML 结尾:

<w:r><w:instrText xml:space="preserve"> =SUM(ABOVE) </w:instrText></w:r><w:r><w:fldChar   w:fldCharType="separate"/></w:r><w:r><w:rPr><w:noProof/></w:rPr><w:t>232000</w:t></w:r><w:r><w:fldChar w:fldCharType="end"/></w:r><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/></w:p></w:tc></w:tr></w:tbl><w:p w:rsidR="003E2115" w:rsidRDefault="003E2115"/><w:sectPr w:rsidR="003E2115"><w:pgSz w:w="12240" w:h="15840"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="720" w:footer="720" w:gutter="0"/><w:cols w:space="720"/><w:docGrid w:linePitch="360"/></w:sectPr></w:body></w:document>

如果我省略了公式,只在生成文档后将其添加回来,它就可以正常工作。

(2) 当我在没有任何格式的情况下包含表格公式时,会生成文档,但总和始终为零。似乎涉及时间问题,公式需要等到生成文档或添加所有行?

知道如何解决这个问题吗?(顺便说一句,我知道我可以在我的速度代码中使用一个变量来对列的内容求和,但我更喜欢使用更简单的内置 Word 公式。)

4

0 回答 0