17

我被困在一个基本的东西上。如何将参数传递给 Google 表格自定义函数。

我在 Apps 脚本代码编辑器中有一个函数定义为:

function usageByMonth(range,theDate) {
    // do something with the arguments passed
}

在我的谷歌表中,该函数用作

=usageByMonth('Source Meter Readings'!A5:A,B1)

在尝试调试函数时,我发现这两个参数是“未定义的”。我查看了很多帖子,甚至直接从示例中复制了具有相同结果的函数。

4

4 回答 4

14

从代码编辑器运行函数不会检索参数。在这种情况下,参数将始终未定义。onEdit()对于使用简单触发器等情况也是如此。获取传递给函数的参数的唯一方法是在电子表格单元格中输入有效的自定义函数。

如果要从代码编辑器测试自定义函数的代码,则必须“硬编码”参数值。

此外,Logger.log()当在工作表中计算自定义函数时,不会将任何内容记录到日志中。

从一个有效的简单自定义函数开始,并以此为基础。

如果要将范围传递到自定义函数的代码中,则必须了解什么是二维数组:

二维数组:

[  [inner Array One],  [inner Array Two], [etc]  ]

范围内的数据被放入一个二维数组中。有一个外部数组,内部数组。内部数组的元素数与范围内的列数一样多。

[  ['single value from first column', 'single value second column']  ]

上述二维数组仅适用于 1 行两列。

因此,要创建一个简单的自定义函数作为测试,请创建一个函数:

function myCustomFunction(argOne) { 
  return argOne[0][0];
};

如果范围是 A1:B5,自定义函数将返回 A1 中的值;

=myCustomFunction(A1:B5)

唯一确定的方法是,如果您的参数被传递到 .gs 服务器函数中,那么您是否得到了返回结果。

有些输入您不能使用。如果您使用不允许的输入,那么(引用文档):

如果自定义函数尝试基于这些 volatile 内置函数之一返回值,它将无限期地显示 Loading...。

例如,您不能使用 NOW() 或 RAND() 作为参数。

于 2016-01-26T21:23:09.127 回答
3

函数参数分隔符取决于电子表格语言环境。如果电子表格语言环境使用逗号作为十进制分隔符,则参数分隔符是分号:

=usageByMonth('Source Meter Readings'!A5:A; B1)

否则不可能将小数传递给函数。

于 2018-04-21T16:43:00.590 回答
0

它可能是A5:A范围,尝试A5:A1000A:A。将单元格地址A5与列地址混合A可能会混淆 API。

于 2018-05-21T22:06:38.427 回答
-1

请务必使用确切的大小写,因为标识符在 Google Script 中是区分大小写的。

IE。theDate 与 thedate 或 TheDate 不同

对于那些不习惯区分大小写的语言的人来说,这是一个常见的陷阱!

于 2017-08-21T08:54:37.627 回答