我正在Google Sheets上创建一个工作数据库,虽然我知道它不是最好的解决方案,但由于诸多限制,这就是我在atm上必须使用的解决方案。
问题是,我是为确实不知道如何使用Google表格上的公式的用户创建的,因此我试图尽可能地做到用户友好。
我将使用此样本表来尝试演示我正在尝试做的事情:
https://docs.google.com/spreadsheets/d/1tXM0IlswQVdwFum9a0pR5NsbtL5Uq_AH1tPbytXGvVg/edit#gid=0
其中一个工作表是数据库,它将统计多列数据(示例中有10列,但实际数据库要大得多)。
还有另一张名为“列索引”的工作表,其中有所有列的列表,它们代表的数据类型以及供人们选择所需数据的复选框。
最后,还有第三个工作表,称为数据提取,我想从数据库中获取选中的列并将其发送到此工作表,以便人们可以将数据下载或复制到其他工作表中。
在我看来,这是一种QUERY的情况,但我不确定是否可以动态进行
答案 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", ""))))