Как обработать неожиданный тип arg eval (org.apache.poi.ss.formula.eval.MissingArgEval) в POI apache - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь проанализировать файл Excel, который содержит различные виды формул. Написанный мною код способен анализировать почти все виды формул, но некоторые из ячеек содержат ссылку на другую ячейку, например = C20, например.В этом типе ячеек мой код имеет

 Unexpected arg eval type (org.apache.poi.ss.formula.eval.MissingArgEval)

Мой код может обрабатывать следующие типы

 =IF(D14=0;" - ";E14/D14), =IF('TreeData-Report'!AB92="H";"";SUM('TreeData-Report'!C92:'TreeData-Report'!E92)) .. etc.

Но когда он приходит в качестве одного аргумента, например C20, D14 ..и т.д., это терпит неудачу.И я опубликую код, где именно он терпит неудачу

      while (cellIterator.hasNext() && cellIteratorTotal.hasNext()) {

            cellCount++;
            Cell currentCell = cellIterator.next();

            Cell currentCellTotal = cellIteratorTotal.next();


            String cellValue = excelManager.evalCell(currentCell);// from here i am sending the  value for validation 
            String cellValueTotal = excelManager.evalCell(currentCellTotal);

Это класс валидатора, где я проверяю тип значения ячейки

public String evalCell(Cell cell) {
    String cellValue = "";
    if (cell.getCellTypeEnum() == CellType.STRING) {
        cellValue = cell.getStringCellValue();
    } else if (cell.getCellTypeEnum() == CellType.NUMERIC) {
        cellValue = formatDoubleNumberToString(cell.getNumericCellValue());
    } else if (cell.getCellTypeEnum() == CellType.FORMULA) {
        cellValue = evalFormulaCell(cell);
    }
    return cellValue.trim();
}

public String evalFormulaCell(Cell cell) {

    String cellValue = "";
    switch (formulaEvaluator.evaluateFormulaCellEnum(cell)) {//Here the code fails if cell contains C20,D14.. etc this type of values 
    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 = "Error Occurred with Code :"+String.valueOf(cell.getErrorCellValue());
        break;
    case _NONE:
        cellValue = "";
        break;
    // CELL_TYPE_FORMULA will never occur
    case FORMULA:
        cellValue = "";
        break;
    }
    return cellValue;
}

Пожалуйста, помогите мне обработать этот видошибок, и мне очень жаль, что я не могу сделать мой пост кристально чистым. Спасибо заранее. Я использую poi 3.16 jar.

...