【发布时间】:2021-09-19 07:59:30
【问题描述】:
我正在尝试在 Google 工作表中创建一个自定义函数,该函数在列范围内搜索特定值,如果是则返回 true。我已经测试了这个函数,它在脚本编辑器中运行时运行良好,但是当我尝试在 Google 表格中使用它时它不起作用。
当我定义数组参数时,函数运行良好,但当我尝试将 Google 表格中的范围作为数组传递时,函数总是返回 false。这是我第一次使用 Javascript/Google 表格函数进行编码,所以我知道我一定是做错了什么,但我无法弄清楚到底是什么问题。根据developer page,据我所知,传递一系列单元格应该会自动生成一个数组,所以我不确定我做错了什么。
所以,
=columnMatch(A2; "hello", "hi", "good morning") 将返回 true,但是
=columnMatch(A2; B2:B) 将始终返回 false。
(其中 A2 定义为“hi”,B 列包含我希望测试的值列表)
我的自定义函数代码如下:
**function columnMatch(submittedLocation, locationlist)**
{
for(var i = 0; i < locationlist.length; i++)
{
if(locationlist.includes(submittedLocation))
return true;
}
return false;
} ```
【问题讨论】:
-
如果您编写此脚本只是为了学习脚本,请继续。但是,如果您正在编写脚本是因为您需要执行该函数,那么已经有内置函数可以执行此操作,例如 =REGEXMATCH(A2, "hello|hi|good morning")
-
您也可以使上述公式建议大小写不可知: =REGEXMATCH(LOWER(A2), "hello|hi|good morning") ... 或将其应用于整个范围,例如, =ArrayFormula(IF(A2:A="",,REGEXMATCH(LOWER(A2:A), "hello|hi|good morning"))) ... 或者您可以将匹配词列表放在一个范围内并使用以下版本: =ArrayFormula(IF(A2:A="",,REGEXMATCH(LOWER(A2:A), JOIN("|",TRIM(FILTER(B2:B,B2:B""))) )))
-
@ErikTyler - 我认为你的 cmets 应该是一个答案。
-
我考虑过,andrewjames;但由于原始帖子专门询问脚本自定义函数,因此我的反馈在技术上并不构成答案。但是,如果 OP 表明这满足了需求,我将发布作为答案。谢谢。
标签: google-apps-script google-sheets