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