Office js 为什么创建的名称范围无法获取命名项目范围?

Office js 为什么创建的名称范围无法获取命名项目范围?,office-js,excel-addins,Office Js,Excel Addins,我试图从工作簿中的命名项读取范围,但出现错误: 当前对象不允许执行此操作 首先创建名称范围(在名称对象上使用add()方法) Excel.run(函数(ctx){ var sheet=ctx.workbook.names.add(“MyRange”、“Sheet1!A1B2”); 返回ctx.sync().then(函数(){ console.log(“添加了范围名称”); }).catch(函数(e){ console.log(“错误消息为->”+e.Message); }) }); 到目前

我试图从工作簿中的命名项读取范围,但出现错误:

当前对象不允许执行此操作

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

Excel.run(函数(ctx){
var sheet=ctx.workbook.names.add(“MyRange”、“Sheet1!A1B2”);
返回ctx.sync().then(函数(){
console.log(“添加了范围名称”);
}).catch(函数(e){
console.log(“错误消息为->”+e.Message);
})
});
到目前为止,代码工作得很好。现在,我想读取现有命名范围的范围。所以我对我的代码做了一些更改:

Excel.run(函数(ctx){
var sheet=ctx.workbook.names.add(“MyRange”、“Sheet1!A1B2”);
返回ctx.sync().then(函数(){
console.log(“添加了范围名称”);
var range=ctx.workbook.names.getItem(“MyRange”).getRange();
加载范围(“地址”);
返回ctx.sync().then(函数(){
console.log(范围.地址);
});
});
}).catch(函数(e){
console.log(“错误消息为->”+e.Message);
});

当我试图运行这段代码时,我得到了上面的错误。我使用了Office.js API中提到的相同方法。

似乎您用于创建命名项的语法(即,传递字符串作为第二个参数,而不是传递范围对象)使得您创建的命名项实际上不是范围对象。因此,当您随后尝试将该命名项视为范围对象时,您将得到一个错误

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

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);
                });
        });
});

您可以使用scriptlab()在Excel中快速轻松地尝试此代码段。只需安装Script Lab加载项(免费),然后在导航菜单中选择“导入”,并使用以下要点URL:。

谢谢,它现在可以工作了。但你能解释一下你的代码和我的代码有什么不同吗?因为我不是在范围中添加直接名称,而是在范围字符串中添加名称。请解释一下。如果要为某个范围创建命名项,则必须在调用
NameItemCollection.add(…)
方法时指定一个范围对象作为第二个参数。如果指定一个字符串而不是范围对象,则Office JS不会将该字符串解释为范围对象,因此当您随后对该命名项调用
getRange()
方法时,将抛出一个错误。(因为
getRange()
方法对字符串无效。)