我有一个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中解决此错误?
答案 0 :(得分:0)
您可以使用“ = IFERROR(A1,if(isna(A1),B1,A1)”
对于整行,它可以像-
IFERROR(E:E,IF(ISNA(E:E),F:F,E:E))