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



我有一个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?

您可以使用"=IFERROR(A1,if(isna(A1),B1,A1)"
对于整行,可以这样做-
IFERROR (E, E,如果(并网发电(E, E), F: F E: E))

这个问题是由于apache poi版本。它发生在poi版本小于5。要么您需要将poi版本升级到5.x。或者直接用IFERROR

等函数替换IFNA函数

最新更新