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公式不更新单元格的主要内容,如果未能解决你的问题,请参考以下文章
将 Excel 公式分解为仅依赖不引用其他单元格的单元格的公式