2017-11-10 14 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オブジェクトを渡す代わりに2番目のパラメータとして文字列を渡す)のように見えますが、作成している名前付きアイテムが作成されていない実際は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を使用するだけです。

+0

ありがとうございました。範囲に直接名前を追加するのではなく、範囲文字列に名前を追加するため、コードが自分のコードとどのように違うのかを教えてください。どうか説明してください。 –

+1

Rangeの名前付きアイテムを作成する場合は、 'NameItemCollection.add(...) 'メソッドを呼び出すときに、** Rangeオブジェクト**を2番目のパラメータとして指定する必要があります。 Rangeオブジェクトの代わりに文字列を指定した場合、Office JSはその文字列をRangeオブジェクトとして解釈しないため、その名前付きアイテムで後で 'getRange()'メソッドを呼び出すとエラーがスローされます。 ( 'getRange()'メソッドは文字列に対して有効ではないため) –

関連する問題