在Coldfusion / Apache POI中强制完整计算整个工作簿

时间:2012-04-03 16:48:47

标签: coldfusion apache-poi coldfusion-9

给定一个工作簿,其中包含Coldfusion 9通过Apache POI生成的跨表公式。

我想以编程方式强制整个工作簿执行“依赖树重建的完整计算”,然后将工作簿保存到磁盘。

因此,当我的最终用户打开电子表格时,他们不必按 Ctrl - Alt - Shift - F9

如何在coldfusion完成此操作?

参考文献:

1 个答案:

答案 0 :(得分:7)

不幸的是,这个问题没有简单的答案。

选项1:

我认为最短的路线是使用CreationHelper.createFormulaEvaluator().evaluateAll()。不幸的是,它不适用于CF9。该方法在POI的更高版本中添加,而不是CF9附带的版本。这同样适用于setForceFormulaRecalculation()。您可以使用JavaLoader.cfc来加载更新版本的POI。然后你就可以访问这些方法了。但是这可能比你想要的任务涉及更多。

选项2:

如果你不知道,如果你知道正确的顺序,你可以遍历工作表并重新计算每个工作表的公式:

wb = sheet.getWorkBook();
evaluator = wb.getCreationHelper().createFormulaEvaluator();
// you could also use an array of sheet names instead
for(sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) {
    poiSheet = wb.getSheetAt(sheetNum);
    rows = poiSheet.rowIterator();
    while (rows.hasNext()) {
        r = rows.next();
        cells = r.cellIterator();
        while (cells.hasNext()) {
            c = cells.next();
            if (c.getCellType() == c.CELL_TYPE_FORMULA) {
                evaluator.evaluateFormulaCell(c);
            }
        }
    }
}

选项3:

另一种可能性是使用自动recalculates when the workbook opens的宏填充模板。明显的缺点是它依赖于宏。但由于它本身是由Excel执行的,因此它可能是最可靠/最强大的选项。