POI名称“_xlfn.IFNA”在当前工作簿中完全未知

时间:2015-09-16 19:09:02

标签: java excel

我有一个Excel 2013 XLSM文档,我正在使用POI 3.12。这是一个进行一些计算的现有文档,我使用POI打开它,输入数据,然后运行计算。问题在于包含以下功能的众多字段:

=IF('VEH1'!B10>3,SUM(H11:W11),0)

当我抓住这些细胞时,我得到一个错误:

org.apache.poi.ss.formula.FormulaParseException: Name '_xlfn.IFNA' is completely unknown in the current workbook

我正在计算:

    XSSFFormulaEvaluator.evaluateAllFormulaCells((XSSFWorkbook) book);

我还尝试为特定工作表计算每个Cell,如果我没有用于该特定任务的工作表有错误,但是对于使用= IF()的所有单元格,我得到相同的错误:

public void recalculateSheet(final String tabName) {
    final FormulaEvaluator eval = new XSSFFormulaEvaluator((XSSFWorkbook) book);
    final Sheet sheet = book.getSheet(tabName);
    for (int counter = 0; counter < 5; counter++) {
        for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
            final Row row = sheet.getRow(rowNum);
            if (row != null) {
                for (int cellNum = 0; cellNum < row.getLastCellNum(); cellNum++) {
                    final Cell cell = row.getCell(cellNum);
                    if (cell != null && cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
                        try {
                            eval.clearAllCachedResultValues();
                            eval.evaluateFormulaCell(cell);
                        } catch (final FormulaParseException e) {
                            logger.warn(tabName + " " + rowNum + "," + cellNum + ": " + e.getMessage());
                        }
                    }
                }
            } else {
                logger.debug("Sheet " + tabName + " does not have a row " + rowNum);
            }
        }
    }
}

由于“IF”是Excel 2013的标准内置函数,如何在POI中解决此错误?

1 个答案:

答案 0 :(得分:0)

您可以使用“ = IFERROR(A1,if(isna(A1),B1,A1)”
对于整行,它可以像-
IFERROR(E:E,IF(ISNA(E:E),F:F,E:E))