我正在使用 apache POI 更改 Excel 工作表中的单元格。更改值后,具有与已更改单元格对应的公式的单元格不会更新。
当我进入excel并单击带有公式的单元格,然后单击功能栏时,公式会更新。
我将计算选项设置为自动更新。
快速示例。
排 :
[A2 + A3] [1] [2]
A1 在这里等于 3
当我使用 POI 更改它时:
[A2+A3] [2] [5]
A1 仍然等于 3,直到我单击该单元格。
刷新工作簿或工作表也不起作用。这是excel还是POI的问题?谁能想到解决方法?
我正在使用 apache POI 更改 Excel 工作表中的单元格。更改值后,具有与已更改单元格对应的公式的单元格不会更新。
当我进入excel并单击带有公式的单元格,然后单击功能栏时,公式会更新。
我将计算选项设置为自动更新。
快速示例。
排 :
[A2 + A3] [1] [2]
A1 在这里等于 3
当我使用 POI 更改它时:
[A2+A3] [2] [5]
A1 仍然等于 3,直到我单击该单元格。
刷新工作簿或工作表也不起作用。这是excel还是POI的问题?谁能想到解决方法?
如果您使用的是 XSSF 工作簿,则可以重新评估所有公式单元格,如下所示:
XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)
如果您使用的是 HSSF 工作簿,则存在类似的 API:
HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)
或者,具体取决于您的设置方式以及您想要完成的具体目标,您应该能够在此处找到您的解决方案
如果您的工作表有一些计算公式,A3=sum(A1:A2)并且现在可以正常工作,A1=5, A2 =4.如果将 A2 的值更改为 2,例如
sh.getRow(0).getCell(0).setCellValue(2); // 设置 A1=2 并执行写操作,查看 A3 的值仍然显示 9。看起来不对,但实际上没有。关键是 Excel 会缓存以前计算的结果,您需要触发重新计算以更新它们。
wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
或与
wb.setForceFormulaRecalculation(true);
然后执行写操作。这会给你正确的结果。有关详细信息,请点击此处
您必须明确触发重新计算。请参阅此处的公式重新计算部分,了解原因和方法。