2012-05-13 18 views
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()中使用getRange的四參數形式?

這是一個錯誤?有沒有人知道與SpreadsheetApp.openById()一起使用這種符號的正確方法?

回答

6

由於您在通過觸發器運行腳本時使用的是openByID,因此將沒有活動工作表。但是你正在嘗試從ActiveSheet中獲取Range,即getRange爲undefined。 要麼你先製作一個片激活,然後用getActiveSheet 或者您可以使用

SpreadsheetApp.getSheets[0].getRange(...); //index may vary 
//or 
SpreadsheetApp.getSheetByName('sheetName').getRange(...) 
+0

Waqar在任何Spreadsheet對象上調用getActiveSheet都不會返回undefined。當電子表格不是活動表格(例如,當使用openById或觸發器等)時,getActiveSheet將返回第一張表格。如果直接從SpreadsheetApp對象調用它(在不存在此類表的情況下),它只會返回'undefined'。 –

+1

非常感謝Waqar和傢伙。我注意到我對兩個不同的對象Spreadsheet和Sheet感到困惑。現在很明顯。 – yasu

+0

感謝Henrique的解釋。你真的搖滾:) –

0

你總是要選擇一個表來,然後用getRange

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

這裏你錯過了getActiveSheet()getSheetByName('sheetName')

+0

不總是卡特曼,你可以看到在這個問題上的例證。 –

+0

感謝您的解釋;) – Cartman

5

當你直接在Spreadsheet對象上得到Range而不是Sheet,就像你在第3和第4行上做的那樣,y你實際上是在第一張紙上獲得範圍。

這只是一個快捷方式,你應該真的getSheets()[0],甚至更好,getSheetByName,然後調用getRange(Sheet對象)。因爲,正如你所說,這是一條捷徑,而不是標準路徑。例如你沒有getRange(int,int,int,int)的簡稱。

相關問題