【问题标题】:Custom function doesn't work with ArrayFormula自定义函数不适用于 ArrayFormula
【发布时间】:2018-01-31 16:45:26
【问题描述】:

我关注了帖子 https://developers.google.com/apps-script/guides/sheets/functions

function DOUBLE(input) {
    return input * 2;
}

并将非常简单的 DOUBLE 函数复制到我的应用脚本中。

=double(A1)

正在工作并将我的整数在“A1”中加倍 但是当我用值填充 A 列时,比如

A1 = 2
A2 = 3
A3 = 4
....

在 B1 单元格中,我运行

=arrayformula(double(A1:A))

它返回错误“结果不是数字”,#NUM!

我不确定出了什么问题。任何应用脚本专家都可以提供帮助吗?

谢谢

【问题讨论】:

  • 我的回答对您有用吗?如果您对我的回答有疑问,请随时告诉我。我想学习解决你的问题。

标签: google-apps-script google-sheets


【解决方案1】:

这个答案怎么样?

  • 例如,当使用=DOUBLE(A1) 时,DOUBLE(input)input 的值被检索为数字或字符串(在您的情况下,它是一个数字。)。
  • 例如,当使用=DOUBLE(A1:B1)时,DOUBLE(input)input的值被检索为二维数组。

确认input是否为数组后需要计算。上面反映的修改如下。

发件人:

return input * 2;

收件人:

return Array.isArray(input) ? input.map(function(e){return e.map(function(f){return f * 2})}) : input * 2;

注意:

当上面的修改示例使用“if”和“for循环”编写时,变为如下。

if (Array.isArray(input)) {
  var result = [];
  for (var i = 0; i < input.length; i++) {
    var temp = [];
    for (var j = 0; j < input[i].length; j++) {
      temp.push(input[i][j] * 2);
    }
    result.push(temp);
  }
  return result;
} else {
  return input * 2;
}

如果我误解了你的问题,我很抱歉。

【讨论】:

  • 谢谢@Tanaike,这就是我想要的!
  • @Weilis 很高兴您的问题得到了解决。也谢谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 2014-11-26
  • 2021-12-19
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多