3
var MasterSheet = SpreadsheetApp.openById("----------------");
var count = SpreadsheetApp.getActiveSheet().getRange(2, 3, 6, 4).getNumColumns();
var count = MasterSheet.getRange("C2:F7").getNumColumns();
var count = MasterSheet.getRange(2, 3, 6, 4).getNumColumns();

2行目と3行目は問題なく動作しますが、4行目で「メソッドが見つかりません」というエラーが発生しますgetRange(number,number,number,number)getRange(number,..)ではなく、アクティブシートでのみ使用できるようですopenById

これはバグですか?でこの表記法を使用する正しい方法を知っている人はいますSpreadsheetApp.openById()か?

4

3 に答える 3

6

トリガーを介してスクリプトを実行しているときに openByID を使用しているため、アクティブなシートはありません。ただし、ActiveSheet から getRange を試みています。つまり、未定義の getRange です。最初にシートをアクティブにしてから getActiveSheet を使用するか、使用することができます

SpreadsheetApp.getSheets[0].getRange(...); //index may vary
//or 
SpreadsheetApp.getSheetByName('sheetName').getRange(...)
于 2012-05-13T11:27:18.350 に答える
5

3 行目と 4 行目で行っているように、Sheet オブジェクトではなく Spreadsheet オブジェクトで直接 getRange を実行すると、実際には 1 番目のシートの範囲が取得されます。

これは単なるショートカットです。実際には getSheets()[0] を使用するか、さらには getSheetByName を呼び出してから getRange (Sheet オブジェクト) を呼び出す必要があります。ご指摘のとおり、これはショートカットであり、標準のパスではありません。たとえば、getRange(int,int,int,int) の省略はありません。

于 2012-05-13T22:08:00.957 に答える
0

getRange を使用するには、常にシートを選択する必要があります

var count = MasterSheet.getRange("C2:F7").getNumColumns();
var count = MasterSheet.getRange(2, 3, 6, 4).getNumColumns();

getActiveSheet()ここで、またはを逃しますgetSheetByName('sheetName')

于 2012-05-13T16:29:44.120 に答える