Excel公式不更新单元格

Posted

技术标签:

【中文标题】Excel公式不更新单元格【英文标题】:Excel Formula Not Updating Cell 【发布时间】:2013-07-29 16:32:29 【问题描述】:

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

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

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

快速示例。

行:

[A2 + A3] [1] [2]

这里的 A1 等于 3

当我使用 POI 更改它时:

[A2+A3] [2] [5]

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

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

【问题讨论】:

你的问题不清楚。请描述确切的操作顺序,包括在 Excel 中打开和关闭工作表。您是否执行以下步骤? 1)创建工作表; 2)关闭Excel; 3)运行你的Java程序; 4) 在 Excel 中重新打开工作表?如果不是,请准确描述您的工作。 其他人的回答没有这样的描述,这样的描述在这种情况下有点无关紧要。 【参考方案1】:

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

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)

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

HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook)

或者,具体取决于您的设置方式以及您想要完成的具体目标,您应该能够找到您的解决方案here

【讨论】:

是的,当我注意到这个问题时,这是一种解决方法。我更想知道为什么excel不会自动更新单元格,而不仅仅是在我点击它们时。刷新工作簿也应该有效。似乎是一个错误。我会接受这个答案,因为它从技术上解决了根本问题。 @PandaBearSoup Apache POI 文档的Why Evaluate Formulas 部分解释了为什么需要这样做,我建议您通读一遍【参考方案2】:

如果您的工作表有一些公式可以计算 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

【讨论】:

我没有足够的声誉来发表上述解决方案的评论。所以我已经粘贴了解决方案。 非常感谢!!! wb.setForceFormulaRecalculation(true); => 对我来说就像一个魅力!【参考方案3】:

您必须明确触发重新计算。请参阅公式重新计算部分here,了解为什么以及如何做到这一点。

【讨论】:

以上是关于Excel公式不更新单元格的主要内容,如果未能解决你的问题,请参考以下文章

使用Apache POI处理excel公式不更新的解决办法

将 Excel 公式分解为仅依赖不引用其他单元格的单元格的公式

excel复制单元格对应公式不变的方法

在excel中横向拖动公式,如何实现引用的单元格地址行号递增?

xls 单元格格式和公式不兼容

excel怎么使用公式引用单元格