Как вручную обновить / оценить ячейки, использующие «пользовательские» формулы? - PullRequest
0 голосов
/ 09 апреля 2019

Я использую Refprop ( Документация ), привязанный к Excel, используя Apache POI для взаимодействия с таблицей Excel. Я пишу программу, которая изменяет данные ячейки, а затем извлекает вновь рассчитанный вывод.

У меня проблемы с обновлением / оценкой ячеек, содержащих формулы, поскольку ячейки содержат формулы REFPROP. Я полагаю, это проблема. Есть ли способ грубой силы оценки?

Я получаю эту ошибку только при попытке оценить формулы, которые не являются превосходными. Ошибка, которую я получаю при попытке оценить ячейку:

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. Для справки я только пытаюсь обновить ячейки D36 и D37 через Excel / Apache POI и получить вывод.

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

Дополнительное замечание: формулы меняются, как и ожидалось, при изменении ячеек D36 и D37 в самом Excel, но не через Java / Apache POI.

Любая помощь приветствуется. Спасибо!

...