Я пытаюсь проанализировать файл Excel, который содержит ячейки формул. Я использую API-интерфейс FormulaEvaluator для POI. Он может анализировать большинство ячеек этого Excel, но для некоторых я получаю другой формат формулы из предыдущего. один и там он терпит неудачу. Формула, которая правильно оценивает:
=IF('TreeData-Report'!AB172="H";"";SUM('TreeData-Report'!C172:'TreeData-Report'!E172))
И код оценки формулы, который я использую:
public String evalFormulaCell(Cell cell) {
String cellValue = "";
switch (formulaEvaluator.evaluateFormulaCellEnum(cell)) {
case BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case NUMERIC:
cellValue = formatDoubleNumberToString(cell.getNumericCellValue());
break;
case STRING:
cellValue = cell.getStringCellValue();
break;
case BLANK:
cellValue = "";
break;
case ERROR:
cellValue = String.valueOf(cell.getErrorCellValue());
break;
case _NONE:
cellValue = "";
break;
// CELL_TYPE_FORMULA will never occur
case FORMULA:
cellValue = "";
break;
}
return cellValue;
}
Это формула, которую он не может разобрать
='Calc-Report'!AD3
Я не понимаю, почему он не может оценить эту формулу, он также получает следующее исключение,
Exception in thread "main" java.lang.RuntimeException: Unexpected arg eval type (org.apache.poi.ss.formula.eval.MissingArgEval)
at org.apache.poi.ss.formula.eval.OperandResolver.coerceValueToDouble(OperandResolver.java:231)
at org.apache.poi.ss.formula.eval.TwoOperandNumericOperation.singleOperandEvaluate(TwoOperandNumericOperation.java:30)
at org.apache.poi.ss.formula.eval.TwoOperandNumericOperation.evaluate(TwoOperandNumericOperation.java:36)
at org.apache.poi.ss.formula.functions.Fixed2ArgFunction.evaluate(Fixed2ArgFunction.java:33)
at org.apache.poi.ss.formula.OperationEvaluatorFactory.evaluate(OperationEvaluatorFactory.java:119)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateFormula(WorkbookEvaluator.java:523)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateAny(WorkbookEvaluator.java:290)
at org.apache.poi.ss.formula.WorkbookEvaluator.evaluateReference(WorkbookEvaluator.java:723)
at org.apache.poi.ss.formula.SheetRefEvaluator.getEvalForCell(SheetRefEvaluator.java:48)
Пожалуйста, помогите, я понятия не имею об этом. Заранее спасибо.