1

我试着写,看起来像这样的自定义函数:定制谷歌表功能

function myFunction(arg1, arg2){ 
    //some calculations on the range described by these two arguments 
    return value of the calculation 
} 

arg1是从电子表格单元格格式化为A1

arg2是第二单元格引用A2

我需要这两个参数来指向同一电子表格中另一个工作表上的范围。有点像这样:range A1:A2 on Sheet2

当我使用代码"A1:A2"作为参数getRange()时,我可以得到电子表格Sheet2并获取范围。

事情不好走当我这样做:

var range = arg1 & ":" & arg2; 
var sheetRange = sheet2.getRange(range); 

我敢肯定,这里有一个语法问题,使得它不可能为功能解释range的范围。

我完全难倒了......任何帮助,指向一个很好的语法参考网站或一些很好的教程也值得赞赏。这是对我的问题的答案;)

回答

0

即使更正您的api和语法错误,它仍然会失败,因为自定义函数必须是确定性的。由于您传递了范围名称而不是其值,因此如果您再次传递相同范围但范围值已更改,则您的函数将返回以前的计算。 Tldr要么传递的值不是范围名称或不使用自定义函数。

+0

感谢您的回复,齐格。我对整个脚本非常陌生。你的答案是否意味着不可能使用两个字符串参数并以getRange()将它们作为范围接受的方式对它们进行格式化? – user3338039

+0

我想要做的基本事情就是创建一个类似于custum SUM函数的东西。我会传递一个范围像SUM(A1:A2),但是我怎么去做这个工作?希望这有助于澄清我想要做的事情。 – user3338039

+0

它可能建立范围字符串,并获得其数据,但就像我说它不会正常工作,因为自定义函数是确定性的。 –

0

当你选择一个范围值,并把它传递给他们会在你的代码作为一个数组,对数组的详细信息显示功能查看此页面:http://javascript.info/tutorial/array

+0

你可以掀起一个样本谷歌电子表格来帮助这个家伙? –

0

我做了一个例子给你。这里检查:example

/** 
* custom function 
* 
* @customfunction 
*/ 
function myFunc(input){ 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName('Sheet2'); 

if (input.map) {   // Test whether input is an array. 
    return input.map(myFunc); // Recurse over array if so. 
    } else { 
    return sheet.getRange(1, input).getValue(); 
    } 
} 

它输入从工作表Sheet值的范围内,但填充目标细胞与从片材2的条目,使用输入作为第一行的列数在Sheet 2中。希望这可以帮助。