我有一个EXCEL电子表格,其中包含许多计算,其中包括递归公式(在excel中完全没问题,计算这些没有问题)。
我正在使用Apache Poi API的3.8版来打开现有的电子表格,为计算添加更新的值,保存电子表格,然后将结果读入我的程序。
所有这些都有效,除了电子表格的内存poi版本不执行递归计算。
我正在调用POI代码来计算整个工作簿,每个工作表以及每个公式单元格,但单元格公式从不计算。
如果我打开已保存的电子表格并对其进行计算,则公式会准确计算该值。我需要避免让用户手动打开保存的电子表格。
非常感谢对这个问题的任何见解。
这是我尝试过的代码。它运行时没有错误,但不计算公式。
公式已经在电子表格中正常工作,所以我试图强制公式重新计算。
我尝试过所有这些变化。代码运行并执行但不计算公式
wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
/*
//wb.getCreationHelper().createFormulaEvaluator().evaluateAll();
System.out.println(wb.getSheet("Rate Report").getRow(16).getCell(0).getStringCellValue());
System.out.println(wb.getSheet("Rate Report").getRow(16).getCell(1).getNumericCellValue());
FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
//String wbsheets[] = {"Original","Main_DB","Parameters","Translator","Workers Comp.","Rate Report","Notes Fields"};
String wbsheets[] = {"Notes Fields","Translator","Parameters","Rate Report"};
for(String sheetName : wbsheets) {
Sheet sheet = wb.getSheet(sheetName);
System.out.println("processing sheet: " + sheet.getSheetName());
for(Row r : sheet) {
for(Cell c : r) {
if(c.getCellType() == Cell.CELL_TYPE_FORMULA) {
System.out.println("Recalcing: "+r.getRowNum()+c.getColumnIndex() + "in "+ sheet.getSheetName());
evaluator.evaluateFormulaCell(c);
}
}
}
}
XSSFFormulaEvaluator.evaluateAllFormulaCells((XSSFWorkbook) wb);