如何手动更新/评估使用“自定义”公式的单元格?

时间:2019-04-09 15:17:47

标签: java excel excel-formula apache-poi

我正在使用RefpropDocumentation)绑定到Excel,并使用Apache POI与Excel工作表进行交互。我正在编写一个程序,该程序可以更改单元格数据,然后检索新计算的输出。

由于单元格包含REFPROP公式,因此我无法更新/评估包含该公式的单元格。我假设是问题所在。有没有办法强行进行评估?

我仅在尝试评估非excel-native公式时才收到此错误。尝试评估单元格时出现的错误是:

Exception in thread "main" org.apache.poi.ss.formula.FormulaParseException: Unused input [("Z",D24,"PT","E",D36,D37)] after attempting to parse the formula [[1]!REFPROP("Z",D24,"PT","E",D36,D37)]
    at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:2030)
    at org.apache.poi.ss.formula.FormulaParser.parse(FormulaParser.java:170)
    at org.apache.poi.xssf.usermodel.XSSFEvaluationWorkbook.getFormulaTokens(XSSFEvaluationWorkbook.java:85)
    at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateAny(WorkbookEvaluator.java:271)
    at org.apache.poi.ss.formula.WorkbookEvaluator.evaluate(WorkbookEvaluator.java:216)
    at org.apache.poi.xssf.usermodel.BaseXSSFFormulaEvaluator.evaluateFormulaCellValue(BaseXSSFFormulaEvaluator.java:56)
    at org.apache.poi.ss.formula.BaseFormulaEvaluator.evaluate(BaseFormulaEvaluator.java:110)
    at GetCell.evaluateFormulas(GetCell.java:88)
    at GetCell.update(GetCell.java:70)
    at Main.main(Main.java:109)

我尝试更新单元格的代码是:

XSSFFormulaEvaluator.evaluateAllFormulaCells(workbook);
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
evaluator.clearAllCachedResultValues();
evaluator.evaluateFormulaCell(getCell("D41"));
evaluator.evaluate(getCell("D41"));
evaluator.evaluateAll();

这是细胞使用的公式的示例。在这种情况下,这是单元格D41中的公式。作为参考,我仅尝试通过Excel / Apache POI更新单元格D36和D37并获取输出。

=REFPROP("Z",D24,"PT","E",D36,D37)

一个旁注是,在Excel本身中更改单元格D36和D37时,公式会按预期更新,但不能通过Java / Apache POI进行更新。

感谢您的帮助。谢谢!

0 个答案:

没有答案