我认为您列出的第一种方法可能是最简单的。即,重新读取单元格的公式并将其保存为 JavaScript 变量(字符串)。接下来修改适当的公式,对值发出负载,然后将公式恢复为保存字符串。这种方法唯一真正的缺点是你会弄乱某人的公式,这意味着如果步骤 1 和步骤 2 之间出现问题,你会使文档处于脏状态。而且,正如您所说,它可能会对计算产生下游影响(性能方面)。
或者,如果你实际上know有哪些公式,您可以使用“工作表函数”功能。例如,此处您要计算 20 的总和 + 两个工作表范围的总和。
Excel.run(function (ctx) {
var result = ctx.workbook.functions.sum(
20,
ctx.workbook.worksheets.getItem("Sheet1").getRange("F3:F5"),
ctx.workbook.worksheets.getItem("Sheet1").getRange("H3:H5")
).load();
return ctx.sync();
}).catch(function(e) {
console.log(e);
});
这是“最干净”的计算方式,因为它不会影响工作表状态,您甚至可以链接计算:
Excel.run(function (ctx) {
var range = ctx.workbook.worksheets.getItem("Sheet1").getRange("E2:H5");
var sumOfTwoLookups = ctx.workbook.functions.sum(
ctx.workbook.functions.vlookup("Wrench", range, 2, false),
ctx.workbook.functions.vlookup("Wrench", range, 3, false)
);
sumOfTwoLookups.load();
return ctx.sync();
}).catch(function(e) {
console.log(e);
});
缺点是这不适用于 UDF(以及数组公式),并且您需要预先知道单元格由哪种公式组成。但是,如果您正在谈论计算公式的子公式,我假设您已经了解了其中公式的一些信息,因此后者可能不是问题。