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

标签 coldfusion apache-poi coldfusion-9

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

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

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

如何在 coldfusion 中完成此操作?

引用资料:

最佳答案

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

选项 1:

我认为最短路线是使用CreationHelper.createFormulaEvaluator().evaluateAll() .不幸的是,它在 CF9 中不可用。该方法是在比 CF9 附带的版本更高的 POI 版本中添加的。这同样适用于 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 本身执行的,因此它可能是最可靠/最强大的选择。

关于coldfusion - 在 Coldfusion/Apache POI 中强制完整计算整个工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9997798/

相关文章:

c# - 比较 C# 和 ColdFusion 之间的密码哈希 (CFMX_COMPAT)

arrays - ColdFusion - 动态创建多维数组

coldfusion - Google OAuth 代码包含标签

objective-c - 解析 Coldfusion 9 在 Cocoa Obj-C 中生成的 JSON 响应

ColdFusion 9.0.1 修补程序

coldfusion - CF9 cfscript,在参数中传递动态数组

cookies - 如何在 Coldfusion 中检索名称是通过变量设置的 cookie?

java - 在Spring Batch中根据标题读取Excel文件列

java - HSSFWorkbook - 使用不同值的单独列写入 Excel 数据

java - 如何使用 setter 方法在 hibernate 中的列中显式设置 NULL 值?