当细胞值改变时,配方不起作用

时间:2014-12-10 19:01:26

标签: java excel apache-poi

我正在使用POI Excel,我有这种情况:

通过这个行代码我改变了A3值,这是一个下拉列表:

sheet.getRow(2).getCell(0).setCellValue(uf);

这部分工作正确,我已经验证了单元格值已被更改。

不好的部分是:

E7有这个公式:= CONCATENATE($ A $ 3; D7)

所以,当我使用:

更改A3值时
sheet.getRow(2).getCell(0).setCellValue(uf);

应该通过公式更改E7值,但这不起作用。

我不知道如何使用java中的公式动态更改单元格值。

我认为这应该可以单独使用。好像我手动更改了A3值。

2 个答案:

答案 0 :(得分:3)

在Apache POI中,当值发生变化时,Excel公式不会自动重新计算。

完成更改公式中引用的任何单元格的值后,请创建FormulaEvaluator并告诉它使用the evaluateAll method评估所有公式。

sheet.getWorkbook().getCreationHelper().createFormulaEvaluator().evaluateAll();

或者您可以通过使用setForceFormulaRecalculation on the Workbook设置相应的标记来强制Excel在打开时重新计算公式。

sheet.getWorkbook().setForceFormulaRecalculation(true);

答案 1 :(得分:0)

我建议这样做

evaluator.clearAllCachedResultValues()

如果尚未立即使用评估程序进行任何操作,则在此之前。

Javadoc:

/**
 * Should be called whenever there are changes to input cells in the evaluated workbook.
 * Failure to call this method after changing cell values will cause incorrect behaviour
 * of the evaluate~ methods of this class
 */

在评估员使用该行之前,即使在错误的公式上,评估器也可以正常工作。

相关问题