我在Google电子表格中使用ImportXML
来访问user_timeline
method in the Twitter API。我想从响应中提取created_at
和text
字段,并创建结果的两列显示。
目前我通过使用
调用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")
在另一个。
我可以通过一次通话创建此显示吗?
答案 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
中,应该干净地填写并正确地为您提供合理的列数据。
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
尤其是,最好知道如何修改公式以容纳更多列。