Как вернуть несколько столбцов данных с помощью ImportXML в таблицах Google?

Я использую ImportXML в таблице Google для доступа к user_timeline метод в 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")

в другой.

Есть ли способ для меня, чтобы создать этот дисплей с помощью одного вызова?

4 ответа

Решение

Просто объедините ваши запросы с "|"

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

Другой способ преобразовать строки =CONTINUE() в столбцы - использовать transpose():

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

ImportXML поддерживает использование xpath | разделитель, чтобы включить столько запросов, сколько хотите.

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

Однако это не расширяет результаты в несколько столбцов. Вы получаете один столбец повторяющихся триплетов (или сколько угодно атрибутов, которые вы выбрали), как показано ниже в столбце A,

Следующее не рекомендуется

2015.06.16: continue недоступно в "новых Google Sheets" (см. Документацию Google для continue ).

Однако вам не нужно использовать автоматически вставленный CONTINUE() Функция для размещения ваших результатов.

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

Помещено в B2 это должно четко заполнить и правильно, чтобы дать вам вменяемые данные столбца.

пример скриншота

  • ImportXML находится в A2,
  • A3 и ниже, как CONTINUE() функции заполняются автоматически.
  • A1 количество атрибутов
  • B1:D1 являются индексом атрибута для своих столбцов.

Это лучшее решение (НЕ МОЕ), опубликованное в комментариях ниже. Если честно, не знаю, как это работает. Возможно, @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-функцию. Эту функцию можно использовать для любого количества XPATHS. - Pandora 7 марта '19 в 15:51

В частности, было бы хорошо знать, как изменить формулу, чтобы разместить больше столбцов.

Я задал этот вопрос на форуме поддержки 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 только один раз. По крайней мере, пока это решение.

Вот полная тема.