我尝试在工作簿中运行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中当前打开的所有工作簿,这是非常昂贵的,可能不是我们想要做的。
我觉得如果无论采用何种变通方法都无法进行这样的基本操作,那将会非常有限......
答案 0 :(得分:0)
目前手动触发计算的选项方法是对整个工作簿使用calculate()方法。它不应该跨工作簿触发这个,只有这个应用程序实例持有的工作簿。应用程序对象仅引用运行该加载项的单个Excel实例。