2014-02-24 81 views
4

對不起,對於愚蠢的問題,但我搜索了整個互聯網,我找不到一個很好的教程來學習如何編程Google SpreadSheet腳本。Google電子表格腳本:創建簡單功能時找不到函數getRange

我想爲練習做一個非常簡單的功能。

function simplesum(input) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets(); 
    var range = sheet.getRange(input); 

var x = 0; 

for (var i = 1; i <= range.getNumRows(); i++) { 
for (var j = 1; j <= range.getNumColumns(); j++) { 

var cell = range.getCell(i, j); 

x += (cell.getValue()); 
} 
} 

return x; 
} 

我知道我可以使用= sum()來做同樣的事情。這裏的想法是學習如何編程。 (即:= simplesum((A1:A8))它給出一個錯誤說:「TypeError:無法找到函數getRange在對象Sheet。(第4行)」

我應該怎麼辦?

再次,抱歉愚蠢的問題....

回答

3

在這種情況下,您正在實施Google Apps腳本功能,作爲在電子表格單元格中調用的自定義功能

將範圍傳遞給在電子表格單元格中調用的自定義函數時,不會傳遞範圍對象或範圍引用,而是傳遞值的2-D Javascript數組。所以你的自定義函數應該只處理該數組。

function simplesum(input) 
{ 
    var x = 0; 
    for (var i = 0; i < input.length; i++) 
    { 
    for (var j = 0; j < input[0].length; j++) 
    { 
     x += input[i][j]; 
    } 
    } 
    return x; 
} 
+0

非常感謝!它完美的工作! 只是一個更愚蠢的問題:我習慣在VBA上編程。在Excel上,我們可以從代碼中調用一個函數,比如application.sum。 Google Apps腳本有這種方式嗎? – user3347814

+0

電子表格功能不適用於谷歌應用腳​​本。 –

+0

非常感謝! – user3347814

1
var sheet = ss.getSheets(); 

返回表的數組,這意味着sheets.getRange(輸入)將引發該錯誤,請嘗試而不是:

var sheet = ss.getSheets()[0]; 

選擇紙張排列的第一張。谷歌有這方面的一些體面的文件。例如,here's its documentation on getRange()。請注意,它也使用ss.getSheets()[0]。希望這有助於!

+0

感謝您的回答......從來就進行了調整,但現在有一個新的錯誤:「找不到範圍(4號線)」 – user3347814

+0

這似乎與您的輸入有關 - 您使用哪些輸入來創建新錯誤?確保它們是有效的。 –

1

這是工作:

function sum(input) { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getActiveSheet(); // your mistake : getSheets() 
    var range = sheet.getRange(input); 

    var x = 0; 

    for (var i = 1; i <= range.getNumRows(); i++) { 
    for (var j = 1; j <= range.getNumColumns(); j++) { 

    var cell = range.getCell(i, j); 

     x += cell.getValue(); 
    } 
} 

    return x; 
} 

function main() // Yes, I am a former C-programmer ... 
{ 
    var s = sum ("A1:B3"); // Notice the quotes. A string must me entered here. 
    Logger.log('s = ' + s); 
} 
+1

請在您的回答中添加更多詳情。 – Spell

相關問題