首页 > 解决方案 > 用于数组的 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; 
} ```

标签: google-apps-scriptgoogle-sheets

解决方案


您可以将其简化为单行函数:

function columnMatch(submittedLocation, locationlist) {
  return locationlist.flat().filter(String).includes(submittedLocation);
}

这是如何工作的:

submittedLocation单个值。

locationlist是一个范围 - 一个二维值数组:

[ ["val1"], ["val2"], [...], ... ]

为了处理二维单词列表,我们首先将其展平为一个简单的数组。

然后我们过滤掉任何空值以避免一个非常大的数组,其中没有太多的实际数据。我们只保留非空字符串。此步骤不是必需的,但建议执行。

最后,我们可以查看我们的搜索值是否包含在数组中 - 并且只返回该布尔测试的true/false结果。


推荐阅读