Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 使用多个搜索条件的任意组合筛选表_Search_Google Apps Script_Google Sheets - Fatal编程技术网

Search 使用多个搜索条件的任意组合筛选表

Search 使用多个搜索条件的任意组合筛选表,search,google-apps-script,google-sheets,Search,Google Apps Script,Google Sheets,我已经为我的朋友/同事列出了一个酒吧列表,我想添加一个工具,让他们能够搜索符合他们首选标准的酒吧 谷歌表格可以找到 我希望用户能够根据他们在左侧“关键字”下输入的条件进行搜索。因此,这许多可能是从1,关键字,以所有7填写。但我希望它能根据任何组合进行搜索 我最初使用的是一个INDEX/MATCH公式,它只返回一行 在尝试了不同的选项后,我使用了过滤器功能。 但是,这不会忽略空白搜索词。搜索页面上的单元格D4具有当前公式。这将按区域过滤,然后按区域和类别过滤(如果两者都已填写),但我还没有弄清楚如

我已经为我的朋友/同事列出了一个酒吧列表,我想添加一个工具,让他们能够搜索符合他们首选标准的酒吧

谷歌表格可以找到

我希望用户能够根据他们在左侧“关键字”下输入的条件进行搜索。因此,这许多可能是从1,关键字,以所有7填写。但我希望它能根据任何组合进行搜索

我最初使用的是一个
INDEX/MATCH
公式,它只返回一行

在尝试了不同的选项后,我使用了
过滤器
功能。 但是,这不会忽略空白搜索词。搜索页面上的单元格D4具有当前公式。这将按区域过滤,然后按区域和类别过滤(如果两者都已填写),但我还没有弄清楚如何将其扩展到其余的过滤器。 我目前的职能如下:

=IFERROR(IF(AND(LEN(B6),LEN(B7)),FILTER(AllInfo,Area=B6,Category=B7),FILTER(AllInfo,Area=B6)),"-")
filter函数完全符合我对一个搜索条件的要求,但我尝试包含搜索词的任何组合都失败了

我有许多命名的数据范围,它们引用了“多伦多酒吧”表中各自的列

欢迎与多伦多的任何朋友分享此列表


编辑:删除不相关的信息

我得到的最接近的公式是下面的公式,它要求您将布尔值替换为“是”和“否”(或任何其他字符串值):

=ArrayFormula(查询({AllInfo},“select*”)&if(counta(B6:B12)>0,“where”,)&join(“and”,“Col”&(匹配(过滤器(A6:A12,B6:B12“”),转置('Toronto-BARS'!A1:I1),0))&filter(过滤器(B6:B12,B6:B12“”)&0))
2个可以改进的地方,但我没有想到:

  • 在查询中使用列名,而不是列号
  • 正确解析布尔值,并相应地添加或删除单引号,因此它可以支持当前的布尔值/复选框

==>我希望有人能拿起它,完成我做不到的事情

你的问题到底是什么?据我所知,问题是当前函数只考虑前两个筛选器,而不是所有筛选器。是的,我希望在列出结果时考虑所有筛选器。我还希望忽略空白过滤器。也许使用谷歌应用程序脚本功能会更简单?谢谢!我会玩这个,让你知道我的结局!这是伟大的工作!(我也尝试了upvoting,但因为我是新来的,所以它不会出现在你面前)我将布尔值切换为“是”和“否”,到目前为止,除了池/游戏选项外,所有关键字都正常工作。我对查询函数不太熟悉,所以我想看看是否能理解您在这里所做的工作。非常感谢!是的,我在上面的解释中忘记了这一点,但是我重命名了列以完全匹配筛选器的名称,因此每个筛选器都可以动态应用于正确的列。比硬编码过滤器更干净。因此,您应该确保每个过滤器具有与相应列相同的标签/名称,并且可以正常工作。非常感谢Benoit!看来我需要修改一下查询功能。干杯谢谢你的帮助!我已经将你的堆栈溢出链接到了这张表的学分中。希望没问题。
=ArrayFormula(query({AllInfo},"select * "&if(counta(B6:B12)>0,"where ",)&join(" and ","Col"&(match(filter(A6:A12,B6:B12<>""), transpose('Toronto - BARS'!A1:I1),0))&"='"&filter(B6:B12, B6:B12<>"")&"'"),0))