如何获取 office.js 中的所有名称(不是值)?

How to get the all names (not values) in office.js?

我有几个 "named" 范围。我正在尝试获取范围的 name,而不是值。

我试过以下方法:

$("#get-values").click(getValues);

async function getValues() {
    try {
        await Excel.run(async (context) => {
            const sheet = context.workbook.worksheets.getItem("FormName");
            const valm = sheet.names;
            valm.load("names");
            await context.sync();
            console.log(JSON.stringify(valm.names));
        });
    } catch (error) {
        OfficeHelpers.UI.notify(error);
        OfficeHelpers.Utilities.log(error);
    }
}

我不知道如何从上面的脚本中获取名字

在 Excel 中,命名范围是集合 .Names 的一部分。找到一种方法来引用这个集合并循环它。在 VBA 中是这样的:

Option Explicit

Public Sub TestMe()

    Dim name As name
    For Each name In ThisWorkbook.names
        Debug.Print name
        Debug.Print name.NameLocal
    Next name

End Sub

names 集合可在工作簿级别访问:

async function run() {
    await Excel.run(async (context) => {
        var names = context.workbook.names;
        names.load();
        await context.sync();
        console.log(JSON.stringify(names));
    });
}

这将导致 NamedItemCollection 包含 NotedItems 类似于:

{
    "comment": "",
    "name": "Range Name",
    "scope": "Workbook",
    "type": "Range",
    "value": "Sheet1!$A:$C",
    "visible": true
}

范围的地址保存在 value 属性 中。您可以使用它来确定找到给定范围的 sheet。