通过JavaScript API

时间:2016-06-15 17:19:26

标签: ms-office office-js

我尝试在工作簿中运行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

是否有人知道在G7模式下是否有办法强制JavaScript API计算manual

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

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

我觉得如果无论采用何种变通方法都无法进行这样的基本操作,那将会非常有限......

1 个答案:

答案 0 :(得分:0)

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