按JavaScriptAPI强制计算一个单元格

Force the calculation of a cell by JavaScript API

我尝试 运行 来自工作簿 this page 的样本:

Excel.run(function (ctx) { 
    var sheetName = "Sheet1";
    var rangeAddress = "F5:G7";
    var numberFormat = [[null, "d-mmm"], [null, "d-mmm"], [null, null]]
    var values = [["Today", 42147], ["Tomorrow", "5/24"], ["Difference in days", null]];
    var formulas = [[null,null], [null,null], [null,"=G6-G5"]];
    var range = ctx.workbook.worksheets.getItem(sheetName).getRange(rangeAddress);
    range.numberFormat = numberFormat;
    range.values = values;
    range.formulas= formulas;
    range.load('text');
    return ctx.sync().then(function() {
        console.log(range.text);
    });
}).catch(function(error) {
        console.log("Error: " + error);
        if (error instanceof OfficeExtension.Error) {
            console.log("Debug info: " + JSON.stringify(error.debugInfo));
        }
});

当计算模式为automatic时,G7的结果为367。相比之下,当计算模式为manual时,G7的结果为0;这意味着公式 =G6-G5 不会重新计算。

有谁知道在manual模式下是否有办法通过JavaScriptAPI强制计算G7

我们可以想象的一种方法是更改​​计算模式(automatic),但是,calculationMode 在这里是只读的。

另一种方法是 运行 方法 calculate(calculationType: string),但它会重新计算 Excel 中所有当前打开的工作簿,这是相当昂贵的,并且可能不是我们想要的做。

我觉得如果不管解决方法如何都无法实现这样的基本操作,那将是非常受限的...

目前手动触发计算的可选方法是对整个工作簿使用 calculate() 方法。但是,它不应跨工作簿触发此操作,而只能触发此应用程序实例持有的工作簿。应用程序对象仅引用单个 Excel 实例 运行 加载项。