范围输入以在Google应用脚本

时间:2017-11-22 12:10:35

标签: javascript google-apps-script google-sheets custom-function

在我的Google工作表中的单元格中,我调用我的函数:myFunction(A1:A3),其中A1 = 5,A2 = 7,A3 = 3.我现在想要循环输入(A1,A2,和A3)和(例如)将它们相加。

function myFunction(input) {

if (!input.map) {     
return -1; 
}

var sum=0
for(var i=0; i<input.length; i++){
  sum = sum + parseInt(input[i]);
}

return sum

}

但它只返回A1(5)中的值,因为input.length返回1。 如果我删除parseInt(input[i]),则返回&#34; 05,7,3&#34; 我做错了什么?

2 个答案:

答案 0 :(得分:3)

自定义函数参数转换为JavaScript对象类型。如果参数是多单元范围,则将其转换为数组对象,其成员是数组,换句话说,转换为2D数组。

为了获取每个单元格值,而不是input[i]使用类似input[i][j]的内容。

示例:

/**
 * @customfunction
 */
function mySum(input) {
  if (!input.map) return -1; 
  var sum = 0;
  for(var i = 0; i < input.length; i++){
    for(var j = 0; j < input[0].length; j++){
      sum = sum + parseInt(input[i][j]);
    }
  }
  return sum
}

注意:可以通过添加一些规则/输入数据验证来改进上述功能,例如将空格替换为0。

参考

答案 1 :(得分:0)

有这样的功能,但是如果你想学习如何编写脚本和代码,那就太棒了! 该代码适用于垂直范围,例如(A1:A5),但在水平/方形范围内不会,只需在第一个内部做另一个循环来做二维数组的总和

for(var i=0; i<input.length; i++){
  for(var j=0; j<input[0].length; j++){
      sum = sum + parseInt(input[i][j]);
  }
}