2017-11-10 19 views
4

나는 통합 문서에 이름이 항목에서 범위를 읽으려고하지만 오류가 점점 : 생성 된 모든 이름 범위의생성 된 이름 범위가 명명 된 항목 범위를 가져올 수없는 이유는 무엇입니까?

This operation is not permitted for the current object.

먼저 (객체 이름을 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에서 언급 한 것과 같은 방법을 사용했습니다.

답변

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

당신은 신속하고 쉽게 코드를 시도 할 수 있습니다 : 여기

는 범위에 대한 명명 된 항목을 만든 다음 가져 명명 된 항목 (범위) 및 콘솔에 해당 주소를 기록하는 코드입니다 Script Lab ( https://aka.ms/getscriptlab)을 사용하여 Excel에서 자신을 검색합니다. Script Lab 추가 기능 (무료)을 설치 한 다음 탐색 메뉴에서 "가져 오기"를 선택하고 다음 GIST URL ( https://gist.github.com/kbrandl/89706cb9808bd7815eb0c89930ce526c)을 사용하십시오.

+0

감사합니다. 김씨는 지금 일했습니다. 하지만 범위에 직접 이름을 추가하는 대신 범위 문자열에 이름을 추가하기 때문에 코드가 내 코드와 어떻게 다른지 설명해 주시겠습니까? 제발 설명해 줄 수 있니? –

+1

Range에 대해 명명 된 항목을 만들려면 NameItemCollection.add (...) 메서드를 호출 할 때 두 번째 매개 변수로 ** Range 개체 **를 지정해야합니다. Range 개체 대신 문자열을 지정하면 Office JS은 해당 문자열을 Range 개체로 해석하지 않으므로 이후에 해당 명명 된 항목에 대해'getRange()'메서드를 호출하면 오류가 발생합니다. (왜냐하면'getRange()'메소드는 문자열에 유효하지 않기 때문이다.) –