Excel公式未更新单元格

时间:2013-07-29 16:32:30

标签: java excel apache-poi

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

当我进入Excel并单击带有公式的单元格,然后单击功能栏时,公式会更新。

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

快速举例。

行:

[A2 + A3] [1] [2]

这里A1等于3

当我使用POI更改它时:

[A2 + A3] [2] [5]

A1仍然等于3,直到我点击该单元格。

刷新工作簿或工作表也不起作用。这是excel还是POI的问题?有人能想到一个解决方法吗?

3 个答案:

答案 0 :(得分:21)

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

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)

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

HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)

或者,根据您的具体设置以及您要完成的具体内容,您应该能够找到解决方案here

答案 1 :(得分:10)

如果您的工作表有一些说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); 然后执行写操作。这将为您提供正确的结果。详情check here

答案 2 :(得分:2)

您必须明确触发重新计算。请参阅“重新计算公式”部分here了解为什么&怎么做。