当JXLS不生成任何行时,Excel中的SUM引用其他工作表

时间:2019-05-21 12:27:39

标签: excel java-8 spreadsheet jxls

我正在使用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不引用其他工作表?

2 个答案:

答案 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的错误