google-apps-script - 用于数组的 Google 表格自定义函数
问题描述
我正在尝试在 Google 工作表中创建一个自定义函数,该函数在列范围中搜索特定值,如果确实如此,则返回 true。我已经测试了该功能,并且在脚本编辑器中运行时它工作正常,但是当我尝试在 Google 表格中使用它时它不起作用。
当我定义数组参数时,函数运行良好,但是当我尝试将 Google 表格中的范围作为数组传递时,函数总是返回 false。这是我第一次使用 Javascript/Google 表格函数进行编码,所以我知道我一定做错了,但我无法弄清楚到底是什么问题。根据开发人员页面,据我所知,传递一系列单元格应该会自动生成一个数组,所以我不确定我做错了什么。
所以,
=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;
} ```
解决方案
您可以将其简化为单行函数:
function columnMatch(submittedLocation, locationlist) {
return locationlist.flat().filter(String).includes(submittedLocation);
}
这是如何工作的:
是submittedLocation
单个值。
这locationlist
是一个范围 - 一个二维值数组:
[ ["val1"], ["val2"], [...], ... ]
为了处理二维单词列表,我们首先将其展平为一个简单的数组。
然后我们过滤掉任何空值以避免一个非常大的数组,其中没有太多的实际数据。我们只保留非空字符串。此步骤不是必需的,但建议执行。
最后,我们可以查看我们的搜索值是否包含在数组中 - 并且只返回该布尔测试的true
/false
结果。
推荐阅读
- python - 如何通过 python 将多页数据导出到 Excel/CSV?
- html - 使用 DOM 元素作为掩码
- design-patterns - 观察者模式设计和 RXJS 库
- bunifu - 表单边框样式未正确显示
- scala - java.lang.NoClassDefFoundError: org/vafer/jdeb/Console 启动 intellij sbt 项目时
- html - 当具有不同的高度时,如何将具有 flex 布局的 div 彼此向下定位?
- jenkins - jenkins管道中输入值为null时如何设置字符串输入默认值
- python - 使用 zipfile 解压缩档案会将 exe 转换为文本文件 (MacOS)
- javascript - ChartsJS Annotations Plugin - 你能创建一个工具提示来伴随注释吗?
- r - 使用 tidyr 实现等效的 rbind