有没有办法在Google表格上创建动态查询?

时间:2020-10-07 18:06:04

标签: google-sheets google-sheets-formula

我正在Google Sheets上创建一个工作数据库,虽然我知道它不是最好的解决方案,但由于诸多限制,这就是我在atm上必须使用的解决方案。

问题是,我是为确实不知道如何使用Google表格上的公式的用户创建的,因此我试图尽可能地做到用户友好。

我将使用此样本表来尝试演示我正在尝试做的事情:

https://docs.google.com/spreadsheets/d/1tXM0IlswQVdwFum9a0pR5NsbtL5Uq_AH1tPbytXGvVg/edit#gid=0

其中一个工作表是数据库,它将统计多列数据(示例中有10列,但实际数据库要大得多)。

还有另一张名为“列索引”的工作表,其中有所有列的列表,它们代表的数据类型以及供人们选择所需数据的复选框。

最后,还有第三个工作表,称为数据提取,我想从数据库中获取选中的列并将其发送到此工作表,以便人们可以将数据下载或复制到其他工作表中。

在我看来,这是一种QUERY的情况,但我不确定是否可以动态进行

2 个答案:

答案 0 :(得分:3)

这应该做到:

=ArrayFormula(QUERY(
    Database!A:K, 
    "select A,"&
    TEXTJOIN(
        ",",
        1,
        IFNA(
            REGEXEXTRACT(
                ADDRESS(
                    1,
                    MATCH(
                        IF(
                            'Column Index'!C2:C,
                            'Column Index'!B2:B,
                            ""
                        ),
                        Database!1:1,
                        0
                    )
                ),
                "[A-Z]+"
            )
        )
    )
))

我构建了查询字符串,选择了所需的列索引。无需“颜色索引”列。

使用地址,我们可以使用列地址生成适当的列字母,然后仅使用正则表达式提取字母部分。

答案 1 :(得分:1)

我得到的并没有什么不同,因为我也尝试构造查询字符串。不利之处是它可能有点越野车(但可以)

这里是:

=query(Database!A1:K15,"select A,"&join(",",ArrayFormula(SUBSTITUTE(ADDRESS(1,filter(row('Column Index'!C2:C11),'Column Index'!C2:C11),4), "1", ""))))