2014-02-24 55 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

相关问题