Как вернуть несколько столбцов данных с помощью 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 только один раз. По крайней мере, пока это решение.
Вот полная тема.