我试图依靠命名范围来计算JavaScript API的公式。虽然这种方法适用于大多数公式,但我发现对于确定的公式(如INDEX中的某些公式),评估结果并不正确。
我在Script中制作了这个要旨,其中一部分如下所示。在这个示例中,我们使用=INDEX({1,2,3;4,5,6},{1;2},1)、=INDEX(Sheet1!$B$3:$B$8,3)、=INDEX(Sheet1!$B$3:$B$8,{3,4})和JavaScript API定义了几个命名范围。他们在工作簿中的公式方面工作得很好。但是,它们由[[1]] API返回的值( null、null)在代码中是不正确的。
有人知道为什么对这些公式无效吗?我们还可以使用其他API吗?
我对公式有一定的控制,例如,我可以对它们进行转换。是否有可能将这些公式转换为用于计算的JavaScript API的公式?
有什么解决办法吗?
async function test() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
// setup cell values
sheet.getRange("B3:B8").values = [[1],[2],[3],[4],[5],[6]];
sheet.getRange("F3").formulas = [["=name1"]]
sheet.getRange("F7").formulas = [["=name2"]]
sheet.getRange("F9").formulas = [["=name3"]]
await context.sync();
// clean names:
var name1 = context.workbook.names.getItemOrNullObject("name1");
var name2 = context.workbook.names.getItemOrNullObject("name2");
var name3 = context.workbook.names.getItemOrNullObject("name3");
name1.load();
name2.load();
name3.load();
await context.sync();
if (name1.value) name1.delete();
if (name2.value) name2.delete();
if (name3.value) name3.delete();
await context.sync();
// add names:
context.workbook.names.add("name1", "=INDEX({1,2,3;4,5,6},{1;2},1)");
context.workbook.names.add("name2", "=INDEX(Sheet1!$B$3:$B$8,3)");
context.workbook.names.add("name3", "=INDEX(Sheet1!$B$3:$B$8,{3,4}");
await context.sync();
// show evaluated values:
var name1 = context.workbook.names.getItemOrNullObject("name1");
var name2 = context.workbook.names.getItemOrNullObject("name2");
var name3 = context.workbook.names.getItemOrNullObject("name3");
const avs1 = name1.arrayValues.load();
const avs2 = name2.arrayValues.load();
const avs3 = name3.arrayValues.load()
await context.sync();
console.log("name1: ", avs1.values)
console.log("name2: ", avs2.values)
console.log("name3: ", avs3.values)
// show names:
const namedItems = context.workbook.names.load();
await context.sync();
console.log("This worksheet contains " + namedItems.items.length + " named items.");
for (let i = 0; i < namedItems.items.length; i++) {
console.log(JSON.stringify(namedItems.items[i])) + "\n";
}
await context.sync();
});
}发布于 2022-02-25 06:24:31
似乎你也在GitHub上提交了这个问题。我们的同事已经就你的问题提出了解决办法。如果您还没有检查过,请看一下。谢谢。ps: github问题链接是https://github.com/OfficeDev/office-js/issues/2380
https://stackoverflow.com/questions/70791127
复制相似问题