我正在使用Refprop(Documentation)绑定到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进行更新。
感谢您的帮助。谢谢!