我正在使用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)当我包含公式时,文档会完全生成,但是当我打开文件时,我收到此错误:"我们很抱歉。我们无法开放...因为我们发现了一个问题。细节。意外的输入结束。"当您使用公式包含格式时,会出现问题,并且不会生成完整文档。
当我打开工作文档和非工作文档时,通过将它们转换为ZIP文件并在文本编辑器中打开document.xml,我可以看到非工作的document.xml文件不是一个完整的XML文件,但会被截断在SUM(ABOVE)行:
<w:instrText xml:space="preserve"> =SUM(ABOVE)
虽然稍后我添加公式的单词文件具有完整的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公式。)