Google sheets 有没有办法使用GoogleSheets的IMPORTXML函数一次导入两个查询?

Google sheets 有没有办法使用GoogleSheets的IMPORTXML函数一次导入两个查询?,google-sheets,google-sheets-formula,google-sheets-importxml,Google Sheets,Google Sheets Formula,Google Sheets Importxml,在GoogleSheets中,我正在开发一种工具,将某些美国国会选区的信息与其各自的国会议员关联起来。为了便于更新哪些代表为哪些地区服务的信息,我选择使用IMPORTXML函数来检索成员和地区的最新列表 幸运的是,美国众议院办事员发布了一份包含我需要的所有信息的报告。虽然我仍在尝试在工作表中掌握xpath查询,但我认为我已经掌握了如何将其应用于此项目的基本方法。我发现我可以使用以下功能检索州和国会选区信息: =IMPORTXML("http://clerk.house.gov/xml/lists

在GoogleSheets中,我正在开发一种工具,将某些美国国会选区的信息与其各自的国会议员关联起来。为了便于更新哪些代表为哪些地区服务的信息,我选择使用
IMPORTXML
函数来检索成员和地区的最新列表

幸运的是,美国众议院办事员发布了一份包含我需要的所有信息的报告。虽然我仍在尝试在工作表中掌握xpath查询,但我认为我已经掌握了如何将其应用于此项目的基本方法。我发现我可以使用以下功能检索州和国会选区信息:

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict")
这是函数返回的数据:

显然,所有435个地区的结果都在继续(实际上是441个,因为它也包括无投票权的代表),我可以处理这个问题。我遇到的问题是,当我尝试使用以下功能导入众议院成员的姓名时:

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/member-info/namelist")
这就是函数返回的结果:

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

这意味着我不能简单地通过在两个相邻列中使用两个
IMPORTXML
调用(一个包含州/地区,另一个包含名称)将成员与地区关联起来,因为列表没有对齐,这可以在列的底部看到:

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

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict | //member/member-info/namelist")
=FILTER(F3:G,F3:F<>"")
它返回一个单独的列,其中州/地区的名称交错排列,如下所示:

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict | //member/member-info/namelist")
=FILTER(F3:G,F3:F<>"")

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


然而,为了使其有用,我确实需要将这些数据分为两列,一列是州/地区数据,另一列是该地区各自成员的姓名。我正试图尽可能多地了解这个问题,但这远远超出了我过去尝试的范围,也远远超出了我的舒适区。到目前为止,这就是我的立场,我衷心感谢您在这一点上提供的任何帮助。

好的,我想在仔细考虑之后,我想出了一个有效的解决方案(这有点不雅观,但它会完成工作)

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

=ARRAYFORMULA(IF(ISNUMBER(VALUE(RIGHT(E3:E,2))),E3:E,""))
然后在下一列中,我们做同样的事情,除了返回第一列中未通过测试的单元格。但这里的诀窍是,我实际上必须将这一行向上偏移,因为这样它将返回与其所在地区相同行上的名称。这是我用的公式:

=ARRAYFORMULA(IF(ISNUMBER(VALUE(RIGHT(E3:E,2))),"",E3:E))
在这里你可以看到它的工作;姓名排成一行,有空缺的地方有空格:

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

=IMPORTXML("http://clerk.house.gov/xml/lists/MemberData.xml","//member/statedistrict | //member/member-info/namelist")
=FILTER(F3:G,F3:F<>"")
=过滤器(F3:G,F3:F“”)
我们剩下的是两列,一列是州/地区数据,另一列是相应代表的姓名:

我只是想用我的发现来更新一下,以防其他人也有类似的问题