首页 > 解决方案 > 从 Google 表格中的在线 CSV 文件中检索特定或查询数据,而无需将整个 CSV 数据添加到表格中

问题描述

我想从 Google 表格中的在线 CSV 文件中检索特定或查询数据,而不将整个 CSV 数据添加到表格中。例如,一个 CSV 文件存储在 中https://raw.githubusercontent.com/LazyGeniusMan/genshin-tc/main/data/characters/anemo/jean/stats.csv,CSV 文件内容是这样的:

level,ascension,hp,atk,def,ascension_stat,ascension_value
1,0,1143.9840087890625,18.6200008392334,59.83000183105469,Healing Bonus,0
2,0,1238.934618241241,20.16545987895961,64.79588867364873,Healing Bonus,0
3,0,1333.8853640669404,21.71092113836289,69.76178264853479,Healing Bonus,0
...
19,0,2871.399851150665,46.736201928901664,150.1733040253639,Healing Bonus,0
20,0,2967.494634443574,48.30028405925759,155.19903079793949,Healing Bonus,0
20,1,3948.35748844748,64.26408448955544,206.49903003500003,Healing Bonus,0
21,1,4045.5959000870353,65.8467808318328,211.5845682083891,Healing Bonus,0
...
39,1,5808.475131076353,94.54020006523115,303.7825944112774,Healing Bonus,0
40,1,5908.002163144411,96.16014702812208,308.98782670921355,Healing Bonus,0
40,2,6604.931057187379,107.5028460790254,345.437827472153,Healing Bonus,0.055399999022483826
41,2,6703.313642667665,109.10416551193248,350.5832055755236,Healing Bonus,0.055399999022483826

假设我要检索3948.35748844748具有 and 条件level=20ascension=1。因此,如果可能,我需要根据 1 个或多个条件获取特定的单元格/列/行,如果没有,我将尝试添加新列作为标识符(列 ID)。

我尝试使用 QUERY 函数,但未检测到列名,它说Unable to parse query string for Function QUERY parameter 2: NO_COLUMN: hp。我使用的公式是:

=QUERY(IMPORTDATA(https://raw.githubusercontent.com/LazyGeniusMan/genshin-tc/main/data/characters/anemo/jean/stats.csv), "SELECT `hp` where `level`=20 and `ascension`=1",0)

我可以通过使用Col1,Col2等作为列名来检测列名,但我需要指定列名,因为我有许多具有不同列名的 CSV 文件。

我是否遗漏了无法检测到列名的内容?有没有办法将 CSV 第一行声明为列名或其他内容?

注意:不确定这是否相关,CSV 文件是使用 Node.js 生成的

标签: csvgoogle-sheetsgoogle-sheets-formula

解决方案


尝试:

=QUERY(IMPORTDATA("https://raw.githubusercontent.com/LazyGeniusMan/genshin-tc/main/data/characters/anemo/jean/stats.csv"), 
 "select Col3 where Col1 = 20 and Col2 = 1", 0)

在此处输入图像描述


更新1:

尝试:

=DGET(IMPORTDATA(A5), "hp", {"level", "ascension"; 20, 1})

在此处输入图像描述

在此处输入图像描述


更新2:

通过翻转表格并选择我们需要使用的列来查询解决方案。然后按字母顺序对列标题进行排序并再次翻转它,以便我们知道指出要过滤的列

=QUERY(TRANSPOSE(SORT(QUERY(TRANSPOSE(IMPORTDATA(A5)), 
 "where Col1 matches 'hp|level|ascension'"))), 
 "select Col3,Col2 where Col1 = 1 and Col3 = 20", 0)

在此处输入图像描述


推荐阅读