关于java:Excel公式不更新单元格

Excel Formula Not Updating Cell

我正在使用Apache POI更改Excel工作表中的单元格。 更改值后,具有与已更改的单元格相对应的公式的单元格不会更新。

当我进入excel并单击包含公式的单元格,然后在功能栏中单击时,公式将更新。

我将计算选项设置为自动更新。

快速示例。

行数:

[A2 + A3] [1] [2]

A1等于3

当我使用POI更改它时:

[A2 + A3] [2] [5]

在我单击该单元格之前,A1仍等于3。

刷新工作簿或工作表也不起作用。 这是Excel或POI的问题吗? 谁能想到解决方法?


如果您使用的是XSSF工作簿,则可以如下重新评估所有公式单元格:

1
XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)

如果您使用的是HSSF工作簿,则存在类似的API:

1
HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)

或者,具体取决于您的设置方式以及您要达到的目标,您应该可以在这里找到解决方案


如果您的工作表具有计算公式,例如A3=sum(A1:A2)且它与A1=5, A2 =4.一起正常工作,现在将A2的值更改为2

sh.getRow(0).getCell(0).setCellValue(2); //设置A1 = 2
并执行写操作,检查仍显示9的A3值。这似乎是错误的,但实际上不是。关键是Excel会缓存以前计算的结果,您需要触发重新计算才能更新它们。

wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
或搭配

wb.setForceFormulaRecalculation(true);
然后执行写操作。这将为您提供正确的结果。详情请点击这里


您必须显式触发重新计算。有关原因和方法,请参见此处的"公式的重新计算"部分。