在读取单元格之前,必须先调用工作表上的setForceFormulaRecalculation()方法,以确保所有公式都已计算。以下是解决方法的代码示例:
Workbook workbook = WorkbookFactory.create(new File("test.xlsx")); Sheet sheet1 = workbook.getSheetAt(0); Sheet sheet2 = workbook.getSheetAt(1);
// 计算第一个工作表的公式 POIUtils.evaluateAllFormulaCells(workbook, sheet1);
// 读取第一个工作表的值 for (Row row : sheet1) { for (Cell cell : row) { System.out.println(cell); } }
// 计算第二个工作表的公式 POIUtils.evaluateAllFormulaCells(workbook, sheet2);
// 读取第二个工作表的值 for (Row row : sheet2) { for (Cell cell : row) { System.out.println(cell); } }
public static void evaluateAllFormulaCells(Workbook workbook, Sheet sheet) { for (Row r : sheet) { for (Cell c : r) { if (c.getCellType() == CellType.FORMULA) { workbook.getCreationHelper().createFormulaEvaluator().evaluateFormulaCell(c); } } } }