将 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:A1000
或A:A
。将单元格地址 A5
与列地址 A
混合可能会混淆 API.
我被困在一些基本的东西上。如何将参数传递给 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:A1000
或A:A
。将单元格地址 A5
与列地址 A
混合可能会混淆 API.