defineFormulaCellEnum (ячейка) не может понять формулу в Excel с использованием POI - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь проанализировать файл 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)

Пожалуйста, помогите, я понятия не имею об этом. Заранее спасибо.

...