将 Google 工作表自定义函数的参数/参数传递给脚本函数

Passing arguments / parameters from a Google sheets custom function to the script function

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

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

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

在我的 Google sheet 函数中用作

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

调试函数时,我发现两个参数是"undefined"。我看过很多帖子,甚至直接从示例中复制函数,结果相同。

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

如果您想从代码编辑器中测试自定义函数的代码,您必须 "hard code" 参数值。

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

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

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

二维数组:

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

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

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

上面的二维数组只有1行2列。

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

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

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

=myCustomFunction(A1:B5)

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

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

If a custom function tries to return a value based on one of these volatile built-in function, it will display Loading... indefinitely.

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

请务必使用准确的大小写,因为标识符在 Google 脚本中区分大小写。

即。 theDate 与 thedate 或 TheDate 不同

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

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

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

否则无法将小数传递给函数。

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