Apache POI 5.2.2中SUMPRODUCT(ABS(A1:A5))公式求值异常咨询
Apache POI 5.2.2中SUMPRODUCT嵌套ABS公式求值异常
在Apache POI 5.2.2版本中,使用SUMPRODUCT(ABS(A1:A5))公式进行求值时无法返回正确结果,但单独使用SUMPRODUCT()(不含ABS嵌套)时功能正常。请问这是已知缺陷吗?
以下是测试程序:
private static final String FILE_NAME = "C:\\Ruff\\Math Functionality (1).xlsx"; public static void main(String[] args) throws Exception { try { Locale locale = Locale.getDefault(); DataFormatter dataFormat = new DataFormatter(locale); FileInputStream excelFile = new FileInputStream(new File(FILE_NAME)); Workbook workbook = new XSSFWorkbook(excelFile); // 获取包含问题公式的单元格(工作表0的B3,原注释标注A3存在偏差) Cell c = workbook.getSheetAt(0).getRow(2).getCell(1); FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); evaluator.evaluateAll(); //evaluator.evaluateFormulaCell(c); CellValue cVal = evaluator.evaluate(c); switch (cVal.getCellType()) { case NUMERIC: System.out.println("Cell value:" + dataFormat.formatCellValue(c,evaluator)); } } catch(Exception e) { System.out.println(e.getMessage()); } }
这是Apache POI的已知问题,5.2.2版本的公式求值器在处理数组公式嵌套函数时存在逻辑缺陷,SUMPRODUCT与ABS嵌套时,无法正确解析数组运算逻辑,最终导致计算结果错误。
后续发布的5.2.3及以上版本已针对这类嵌套数组公式的求值逻辑完成修复,建议升级到最新稳定版本解决该问题。
若暂时无法升级,可手动实现计算逻辑作为临时替代:读取A1:A5的单元格值,逐个取绝对值后求和,再将结果赋值给目标单元格,绕过POI公式求值器的问题逻辑。
内容的提问来源于stack exchange,提问作者satyakumar putcha
相关产品推荐
相关产品推荐

