如何在Google Spreadsheets中使用ImportXML返回多列数据?

时间:2010-05-05 15:39:07

标签: google-sheets

我在Google电子表格中使用ImportXML来访问user_timeline method in the Twitter API。我想从响应中提取created_attext字段,并创建结果的两列显示。

目前我通过使用

调用API两次来完成此操作
=ImportXML("http://twitter.com/status/user_timeline/matthewsim.xml?count=200","/statuses/status/created_at")

在一列顶部的单元格中,

=ImportXML("http://twitter.com/status/user_timeline/matthewsim.xml?count=200","/statuses/status/text")

在另一个。

我可以通过一次通话创建此显示吗?

5 个答案:

答案 0 :(得分:5)

ImportXML支持使用xpath |分隔符来包含任意数量的查询。

=ImportXML("http://url"; "//@author | //@catalogid| //@publisherid")

然而,它将结果扩展为多列。您将获得一列重复三元组​​(或者您选择的多个属性),如下面的A列所示。

以下不推荐使用

2015.06.16: continue在“新版Google表格”中不可用(请参阅continue的{​​{3}})。

但是,您无需使用自动插入的CONTINUE()功能来放置结果。

=CONTINUE($A$2, (ROW()-ROW($A$2)+1)*$A$1-B$1, 1)

放置在B2中,应该干净地填写并正确地为您提供合理的列数据。

example screenshot

  • ImportXML位于A2
  • A3及以下是CONTINUE()函数自动填写的方式。
  • A1是属性数。
  • B1:D1是其列的属性索引。

答案 1 :(得分:4)

只需将查询与“|”

连接即可
=ImportXML("http://twitter.com/status/user_timeline/matthewsim.xml?count=200","/statuses/status/created_at | /statuses/status/text")

答案 2 :(得分:1)

将= CONTINUE()行转换为列的另一种方法是使用transpose():

=transpose(importxml("http://url","//a | //b | //c"))

答案 3 :(得分:0)

我向Google支持论坛提出了这个问题,这是一个对我有用的解决方案:

=ArrayFormula(QUERY(QUERY(IFERROR(IF({1,1,0},IF({1,0,0},INT((ROW(A:A)-1)/2),MOD(ROW(A:A)-1,2)),IMPORTXML("http://example.com","//td/a | //td/a/@href"))),"select min(Col3) where Col3 <> '' group by Col1 pivot Col2",0),"offset 1",0))

将IMPORTXML的内容替换为您的数据和查询,看看它是否适合您。我

显然,这只会尝试调用一次IMPORTXML函数。至少现在它是一个解决方案。

这里是full thread

答案 4 :(得分:0)

这是在以下评论中发布的最佳解决方案(不是我的)。老实说,我不确定它是如何工作的。也许原始的发帖人@Pandora可以提供解释。

=ArrayFormula(iferror(hlookup(1,{1;ARRAY},(row(A:A)+1)*2-transpose(sort(row(A1:A2)+0,1,0)))))

这是一个非常丑陋的解决方案,甚至没有解释它是如何工作的。至少由于多个错误,例如由于IF的许多参数(因为使用了数组),我无法使其工作。在这里可以找到更短的解决方案= ArrayFormula(iferror(hlookup(1,{1; ARRAY},(row(A:A)+1)* 2-transpose(sort(row(A1:A2)+0,1, 0)))))“ ARRAY”可以替换为IMPORTXML-Function。此功能可用于一个想要的XPATHS。 – Pandora 19年3月7日15:51

尤其是,最好知道如何修改公式以容纳更多列。