2013-07-29 205 views
9

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

当我进入excel并用公式单击单元格,然后单击功能栏中的公式更新。

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

快速示例。

行:

[A2 + A3] [1] [2]

这里A1将等于3

当我使用改变它POI:

[A2 + A3] [2] [5]

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

刷新工作簿或工作表也不起作用。这是Excel或POI的问题吗?任何人都可以想到解决方法吗?

+0

你的问题不清楚。请描述确切的操作顺序,包括在Excel中打开和关闭工作表。你做了以下步骤? 1)创建工作表; 2)关闭Excel; 3)运行你的Java程序; 4)在Excel中重新打开工作表?如果不是,请正确描述你的工作。 –

+2

其他人回答没有这样的描述,这种描述在这种情况下有点不相关。 – PandaBearSoup

回答

20

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

HSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 

:如果您使用的是HSSF工作簿是否存在

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook) 

类似的API或者,具体取决于你如何设置以及你想要完成什么,你应该能够找到你的解决方案here

+0

是的,当我注意到这个问题时,这就是解决方法。我更想知道为什么excel不会自动更新单元格,而不仅仅是当我点击它们。刷新工作簿也应该起作用。看起来像一个错误。我会接受这个答案,因为它在技术上解决了根本问题。 – PandaBearSoup

+1

@PandaBearSoup Apache POI文档中的[Why Evaluate Formulas](http://poi.apache.org/spreadsheet/eval.html#WhyEvaluate)部分解释了为什么您需要这样做,我建议您阅读一下 – Gagravarr

2

您必须明确触发重新计算。请参阅重新计算公式部分here关于为什么&该怎么做。

9

如果你的表有一些公式发言权A3=sum(A1:A2)被计算并且将其与A1=5, A2 =4.如果与2等

sh.getRow(0).getCell(0).setCellValue(2); //设置A1 = 2 改变A2的值,并执行写入操作时,检查它仍呈现9 A3的值工作正常现在这看起来不对,但实际上并非如此。重点是Excel缓存先前计算的结果,并且需要触发重新计算才能更新它们。

wb.getCreationHelper().createFormulaEvaluator().evaluateAll();

wb.setForceFormulaRecalculation(true); ,然后执行写操作。这会给你正确的结果。详情check here

+1

好复制粘贴作业。 –

+0

我没有足够的声望发布上述解决方案的评论。所以我已经贴上了解决方案。 – nilamber

+0

非常感谢! wb.setForceFormulaRecalculation(真); =>对我来说就像一个魅力! –

相关问题