【问题标题】:Extract data from different google sheets using QUERY, IMPORTRANGE and TRANSPOSE?使用 QUERY、IMPORTRANGE 和 TRANSPOSE 从不同的谷歌表格中提取数据?
【发布时间】:2021-03-22 12:43:03
【问题描述】:

大家好,

我有 3 个测试文件,如上面的屏幕截图所示。我想将这 3 个文件中的数据导入到主 Google 工作表中。这是我正在使用的公式:

=TRANSPOSE(QUERY(TRANSPOSE({IMPORTRANGE(NameList!B3,"Sheet1!B26:L29");IMPORTRANGE(NameList!B4,"Sheet1!B26:L29");IMPORTRANGE(NameList!B5,"Sheet1!B26:L29")}),"where Col1 is not null"))

这个公式的结果输出是:

当所有数据都填写在 3 个源文件中时,它工作得非常好。但是,如果第一个文件 (testing) 为空,则输出将是主 google 表中单元格 B5 中的 #N/A。我可以知道如何避免这种情况,即当第一个文件充满数据时数据才出来?如果第一个文件为空,我希望公式能够跳过第一个文件并继续处理第二个和第二个文件。

任何建议将不胜感激!

【问题讨论】:

    标签: jquery google-sheets google-sheets-formula transpose


    【解决方案1】:

    当您的范围为空时,您会收到单个单元格的错误消息。 只有当所有表的列数相等时,才能堆叠表 {table;table;table;}。 如果你有 11 列(从 B 到 L),你应该得到一行 11 个空单元格以防出错。所以每个 importrange 都应该用 iferror 或 ifna 公式包装,返回空单元格:

    iferror(IMPORTRANGE(NameList!B3,"Sheet1!B26:L29");{""\""\""\""\""\""\""\""\""\""\""})
    

    我已经构建了一个示例文件:

    这里我尝试从同一个文件中导入范围。在第一行中,我尝试引用不存在的工作表。第二个参考是正确的。 iferror 制作 2 个空单元格以防止出错。

    文件在这里:https://docs.google.com/spreadsheets/d/14AnNAlV7mQmXo9vJ6YQugSm2-PS-RQPoND27wwv5f5k/edit#gid=0

    【讨论】:

    • 嗨,Krzysztof Dołęgowski,你的意思是这样的吗? =TRANSPOSE(QUERY(TRANSPOSE({IFNA(IMPORTRANGE(NameList!B3,"Sheet1!B26:L29"));IFNA(IMPORTRANGE(NameList!B4,"Sheet1!B26:L29"));IFNA(IMPORTRANGE(NameList!B5,"Sheet1!B26:L29"))}),"where Col1 is not null")),我试过了,但它仍然返回 N/A。还是我误解了你的意思?
    • @weizer - 我的答案已更新。请看一下
    • 谢谢 Krzysztof Dołęgowski,它现在对我有用!我可以知道为每个IMPORTRANGE 添加{""/""} 是什么意思吗?
    • "" 表示空内容 \ 是单元格之间的分隔符。 { } 是表示“table inside”的语句。
    【解决方案2】:

    编辑

    我没有从你的问题中理解你想要什么。对不起。你说的不清楚。
    这就是我在评论中要求阅读this

    现在我知道你可以使用这个公式 2 QUERY

    =QUERY(QUERY({IMPORTRANGE(NameList!B3,"Sheet1!B26:L29");
                  IMPORTRANGE(NameList!B4,"Sheet1!B26:L29");
                  IMPORTRANGE(NameList!B5,"Sheet1!B26:L29")},
                           "where 1=1"), 
              "where Col1 is not null")
    

    它会为您提供与您完全一样的结果。
    不需要IFERROR
    不需要{""\""\""\""\""\""\""\""\""\""\""}
    我想每个 importrange 有 10 个 importrange 和 20 个列 Sheet1!B26:T29IFERROR
    10 倍:

    iferror(IMPORTRANGE(NameList!B3,"Sheet1!B26:L29");{""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""\""})
    

    我疯了


    第一个答案
    你也试试这个技巧

    =TRANSPOSE(QUERY(TRANSPOSE({IMPORTRANGE(NameList!B3,"Sheet1!B26:L29");IMPORTRANGE(NameList!B4,"Sheet1!B26:L29");IMPORTRANGE(NameList!B5,"Sheet1!B26:L29")}),"where Col1 is not null or 1=1 "))

    你看我加了or 1=1
    这将停止主 Google 工作表中单元格 B5 中的错误 #N/A

    【讨论】:

    • 嗨 Swen,我尝试添加 1=1,但它会导致 QUERY 功能无法正常工作。它将使用where Col1 is not null 重新创建我要删除的空列。
    • 不是1=1。它是or 1=1。它对我有用。如果不是你阅读this评论。
    • @Swen - 很有趣,但您能解释一下查询中的“或 1=1”究竟是什么意思吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多