有没有办法使用Google表格的IMPORTXML功能一次导入两个查询?

问题描述 投票:1回答:1

在Google表格中,我正在开发一种工具,将有关某些美国国会区的信息与其各自的国会议员相关联。为便于更新哪些代表服务哪些地区的信息,我选择使用IMPORTXML功能来检索最新的会员和地区名单。

幸运的是,美国众议院文员发布了一个包含我需要的所有信息的up-to-date xml file。虽然我仍在尝试在Sheets中掌握xpath查询,但我认为我已经有了一个非常基本的方法来处理如何将它应用于这个项目。我发现我可以使用以下功能来检索州和国会区信息:

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict")

这是函数返回的数据:

显然,所有435个地区的结果仍在继续(实际上441因为它还包括非投票代表),我可以解决这个问题。我遇到的问题是当我尝试使用以下函数导入House的名称时:

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/member-info/namelist")

这就是该函数返回的内容:

同样,结果仍在继续,并包括每个成员。但是,由于一些空缺,现在众议院没有435名议员(441名包括代表)。检索成员名称的IMPORTXML函数只返回它可以找到的438个名称。

这意味着我不能轻易地通过在两个相邻列中使用两个IMPORTXML调用将一个成员关联到一个区域(一个具有州/区,另一个具有名称),因为列表没有排列,这可以在列的底部:

我做了一些挖掘,并了解到我可以通过在查询之间添加IMPORTXML在一个|call中使用两个xpath查询。使用前面函数的xpath查询,IMPORTXML调用如下所示:

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict | //member/member-info/namelist")

它返回一个列,状态/区域与这样的名称交错:

有趣的是,当我这样做时,这些名字与他们的地区相适应;当有空缺时,该函数导入该区域,跳过不存在的名称,导入下一个区域,然后输入下一个名称。因此,当谈到空置区时,这就是输出的样子(突出显示空置区):

但是,为了有用,我真的需要将这些数据分为两列,一列是州/区数据,另一列是该区各自的成员名。我正在努力尽可能多地了解这个问题,但这远远超出了我过去尝试过的任何范围,而且远远超出了我的舒适区。这就是我到目前为止所处的位置,此时的任何帮助都将得到真诚的赞赏。

google-sheets google-sheets-formula google-sheets-importxml
1个回答
2
投票

好吧,我想在睡觉之后,我想出了一个有效的解决方案(这是一个不太优雅的触摸,但它会完成工作)。

因此,使用带有两个查询的IMPORTXML调用会给出正确的顺序,但不是正确的间距。我们在另一列中可以做的是检查每个单元格中字符串的最后两个字符是否可以强制转换为数字。如果他们可以,那么这个值必须是州/区,我们将返回该值。这是我使用的公式:

=ARRAYFORMULA(IF(ISNUMBER(VALUE(RIGHT(E3:E,2))),E3:E,""))

然后在下一列中,我们做同样的事情,除了我们返回第一列没有通过测试的单元格。但这里的诀窍是我实际上不得不将这个公式偏移一行,因为这样它将返回与其区域相同的行上的名称。这是我用于此的公式:

=ARRAYFORMULA(IF(ISNUMBER(VALUE(RIGHT(E3:E,2))),"",E3:E))

在这里你可以看到它有效;这些名字排成一列,并且有空缺的空白:

然后为了消除条目之间的所有额外行,我们可以像这样过滤它们:

=FILTER(F3:G,F3:F<>"")

我们留下的是两列,一列是州/区数据,另一列是相应的代表名称:

只是想用我发现的内容进行更新,以防其他人同样挣扎。

© www.soinside.com 2019 - 2024. All rights reserved.