7

ImportXML在 Google 电子表格中使用来访问user_timelineTwitter 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")

在另一个。

有没有办法让我通过一个电话来创建这个显示?

4

5 回答 5

9

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

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

但是,它不会结果扩展到多列。您会得到一列重复的三元组(或您选择的许多属性),如下面的列中所示A

以下内容已弃用

2015.06.16:continue在“新的 Google 表格”中不可用(请参阅:Google文档continue)。

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

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

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

示例截图

  • ImportXML 位于A2.
  • A3以下是CONTINUE()自动填充功能的方式。
  • A1是属性的数量。
  • B1:D1是它们列的属性索引。
于 2013-08-27T19:44:09.007 回答
7

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

=transpose(importxml("http://url","//a | //b | //c"))
于 2013-11-03T15:20:25.033 回答
5

只需用“|”连接您的查询

=ImportXML("http://twitter.com/status/user_timeline/matthewsim.xml?count=200","/statuses/status/created_at | /statuses/status/text")
于 2011-04-15T06:43:32.760 回答
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 函数一次。至少现在是一个解决方案。

这是完整的线程

于 2016-08-22T16:28:46.533 回答
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。– 潘多拉 2019 年 3 月 7 日 15:51

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

于 2020-03-21T14:13:45.983 回答