2

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

幸运的是,美国众议院文员发布了一个最新的 xml 文件,其中包含我需要的所有信息。虽然我仍在尝试掌握 Sheets 中的 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")

它返回一个单列,其中州/地区与这样的名称交错:

这是双重查询图像的链接

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

在这张图片中,你可以看到名字的跳过

但是,为了使这个有用,我真的需要将这些数据分成两列,一列包含州/地区数据,另一列包含该地区各自成员的姓名。我正在尝试尽可能多地了解这个问题,但这远远超出了我过去尝试过的任何事情的范围,而且远远超出了我的舒适区。到目前为止,这就是我的立场,在这一点上的任何帮助将不胜感激。

4

1 回答 1

3

好的,我想在睡觉之后,我想出了一个可行的解决方案(这有点不雅,但它会完成工作)。

因此,使用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<>"")

我们剩下的是两列,一列是州/地区数据,另一列是对应的代表姓名:

在此处输入图像描述

只是想更新我发现的内容,以防其他人也有类似的挣扎。

于 2019-04-12T15:05:31.983 回答