【问题标题】:Range input to function in Google apps script范围输入以在 Google 应用程序脚本中运行
【发布时间】:2017-11-22 12:10:35
【问题描述】:

在我的谷歌表格的一个单元格中,我这样调用我的函数: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]),它会返回“05,7,3” 我做错了什么?

【问题讨论】:

  • 您的代码对我有用...是否有理由使用自定义函数而不是 =SUM(A1:A3)

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


【解决方案1】:

自定义函数参数被转换为 JavaScript 对象类型。如果参数是多单元格区域,则将其转换为成员为数组的数组对象,即二维数组。

为了获取每个单元格值,请使用 input[i][j] 之类的东西,而不是 input[i]

例子:

/**
 * @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替换空白。

参考文献

【讨论】:

    【解决方案2】:

    有内置函数可以做到这一点,但如果你想学习如何编写脚本和编码,这很棒! 该代码仅适用于垂直范围,例如(A1:A5),但在水平/方形范围内不会,只需在第一个循环内执行另一个循环即可对 2D 数组求和

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2014-03-26
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      相关资源
      最近更新 更多