我正在使用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值。
答案 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
*/
在评估员使用该行之前,即使在错误的公式上,评估器也可以正常工作。