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