我正在使用JXLS库来创建excel文件。作为excel的一部分,我有一个简单的表,其中包含两列,这些列由JXLS动态生成。
| ID | Value |
| ${record.id} | ${record.value} |
| | SUM(D10:D10) |
使用XLS注释自动生成行:
jx:each(items="export.rows" var="record" lastCell="D10")
我正在生成一个多页模板,其中某些导出中的项目可能在rows
中,而另一些则没有。问题是,由于某种原因,包含空rows
的项目会更改公式以引用实际上包含一些rows
的第一张工作表,从而有效地更改为例如到:
SUM('SHEET_WITH_ROWS'!D10:'SHEET_WITH_ROWS'!D10)
如果我仅导出不包含rows
的单个项目,则对于当前的单个工作表,公式已正确更改为=0
并且不显示任何内容。
如何配置JXLS不引用其他工作表?
答案 0 :(得分:0)
很不幸,我无法使用JXLS机制找到有效的解决方案。我尝试将JXLS条件与JXLS分别组合,但似乎没有任何效果。当JXLS条件成功隐藏有问题的部分时,另一个部分出现了类似的问题,该部分最初引用了D11
单元中的总和。
我已决定通过使用骇客的解决方案来解决此问题,并使用充当占位符的单个元素预先填充集合:
if (CollectionUtils.isEmpty(data.getRows())) {
data.setRows(Collections.singletonList(ExportRow.createEmptyPlaceholder()));
}
空占位符是一个对象,其所有属性均设置为null
,JXLS忽略了其输出,从而强制each
有效地生成了一行完全不包含任何内容的行。
在我看来,这是一个合理的权衡。
答案 1 :(得分:0)
这很可能是Jxls公式计算中的错误。
我建议您尝试使用最新的Jxls master branch运行代码(您需要使用mvn install
来构建二进制文件),因为自2.6.0起已修复了一些与公式计算有关的错误。 / p>
如果仍然无法正常工作,则可能会引发Jxls issue tracker的错误