使用POI计算EXCEL中的递归公式的值

时间:2012-10-17 22:04:56

标签: java excel recursion apache-poi

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

0 个答案:

没有答案