首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JavaScript API命名范围计算某些公式无效。

使用JavaScript API命名范围计算某些公式无效。
EN

Stack Overflow用户
提问于 2022-01-20 17:54:57
回答 1查看 38关注 0票数 0

我试图依靠命名范围来计算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返回的值( nullnull)在代码中是不正确的。

有人知道为什么对这些公式无效吗?我们还可以使用其他API吗?

我对公式有一定的控制,例如,我可以对它们进行转换。是否有可能将这些公式转换为用于计算的JavaScript API的公式?

有什么解决办法吗?

代码语言:javascript
复制
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();
  });
}
EN

回答 1

Stack Overflow用户

发布于 2022-02-25 06:24:31

似乎你也在GitHub上提交了这个问题。我们的同事已经就你的问题提出了解决办法。如果您还没有检查过,请看一下。谢谢。ps: github问题链接是https://github.com/OfficeDev/office-js/issues/2380

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70791127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档