在 Google 应用程序脚本中运行的范围输入

Range input to function in Google apps script

在我 google sheet 的单元格中,我这样调用我的函数: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

}

但它只是 returns A1 (5) 中的值,因为 input.length returns 1。 如果我删除 parseInt(input[i]),它会 returns "05,7,3" 我做错了什么?

有用于执行此操作的内置函数,但如果您想学习如何编写脚本和编码,这很棒! 该代码仅适用于垂直范围,例如 (A1:A5) 但在 horizontal/square 范围内不会,只需在第一个范围内做另一个循环以求和 2D array

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

自定义函数参数转换为 JavaScript 对象类型。如果参数是一个多单元格范围,它会被转换为一个数组对象,其成员是数组,换句话说,作为一个二维数组。

为了获取每个单元格的值,不要使用 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 替换空白。

参考资料