为什么创建名称范围无法获得命名项目范围?

时间:2017-11-10 09:56:51

标签: office-js excel-addins

我尝试从工作簿中的命名项读取范围,但收到错误:

  

当前对象不允许此操作。

首先创建名称范围(在名称对象上使用add()方法)。

Excel.run(function (ctx) {
    var sheet = ctx.workbook.names.add("MyRange", "Sheet1!A1B2");
    return ctx.sync().then(function () {
        console.log("range name added");
    }).catch(function (e) {        
        console.log("Error Message is -> " + e.message);
    })
});

直到现在代码工作得非常好。现在我想读取现有命名范围的范围。所以我对我的代码进行了一些更改:

Excel.run(function (ctx) {
    var sheet = ctx.workbook.names.add("MyRange", "Sheet1!A1B2");
    return ctx.sync().then(function () {
        console.log("range name added");
        var range = ctx.workbook.names.getItem("MyRange").getRange();
        range.load("address");
        return ctx.sync().then(function () {
            console.log(range.address);
        });
    });
}).catch(function (e) {
    console.log("Error Message is -> " + e.message);
});

当我尝试运行此代码时,我收到上述错误。我使用了Office.js API中提到的相同方法。

1 个答案:

答案 0 :(得分:2)

看起来像你用来创建命名项的语法(即,传递一个字符串作为第二个参数而不是传递一个Range对象)正在使它创建你正在创建的命名项目一个Range对象。因此,当您随后尝试将该命名项视为Range对象时,您将收到错误。

这是一个代码片段,它为一个范围创建一个命名项,然后获取该命名项(范围)并将其地址写入控制台:

Excel.run(function (ctx) {

    // Create named item "MyRange" for the specified range.
    var sheet = ctx.workbook.worksheets.getItem("Sample");
    var myRange = sheet.getRange("A1:E1");
    sheet.names.add("MyRange", myRange);

    return ctx.sync()
        .then(function () {

            // Get the range for the named item "MyRange" and load its address property.
            var myNamedItem = sheet.names.getItem("MyRange");
            var range = myNamedItem.getRange();
            range.load("address");

            return ctx.sync()
                .then(function () {
                    console.log("Address of range: " + range.address);
                });
        });
});

您可以使用脚本实验室(https://aka.ms/getscriptlab)在Excel中快速轻松地尝试此代码段。只需安装Script Lab加载项(免费),然后在导航菜单中选择“导入”,并使用以下GIST URL:https://gist.github.com/kbrandl/89706cb9808bd7815eb0c89930ce526c