Как получить данные из Интернета, используя значения ячеек для формирования URL-адреса, из которого их следует извлечь?
Как мне использовать ссылки на ячейки для сборки URL, который Excel может использовать для получения данных из Интернета? По сути, я пытаюсь использовать значения ячеек для сборки полного URL со строкой запроса, чтобы вернуть результат запроса в другую ячейку.
У меня есть рабочий лист с URL-адресами API в одном столбце и строками запросов в следующем столбце. Я хочу взять, скажем, ячейку $B$2 (URL) и ячейку $C$2 (строка запроса), чтобы получить результаты URL из =$B$2&$C$2
Большинство результатов будут представлять собой просто числовые значения и не будут нуждаться в интерпретации, в то время как другие результаты будут аналогичны результатам JSON и должны быть перемещены/сожжены в правильную позицию для получения желаемого результата.
Функция «Получить данные из Интернета» в Excel хорошо справляется с этой задачей, если я изначально указываю URL-адрес... но проблема в том, что при попытке использовать эту функцию в Excel она просто собирает URL-адрес из ссылок на ячейки, а не вставляет URL-адрес изначально в форму «Получить данные из Интернета».
Есть идеи? Спасибо.
Редактировать:
Я связался с одним из моих старых преподавателей, преподававших Excel. Он сказал, что не уверен, но предположил, что сценарий VBA может быть вариантом.
решение1
Насколько я понимаю, вам придется создать таблицу запросов для каждой строки, потому что URL-адрес данных для каждой строки будет разным/уникальным. В качестве альтернативы вы можете использовать одну таблицу запросов и перебирать все строки, обновляя URL-адрес соединения таблицы в каждой итерации и извлекая извлеченные данные в соответствующую строку, используя фрагмент VBA, подобный следующему (отказ от ответственности: не проверял это):
' assuming your data starts at row 2
i = 2
Do While Not IsEmpty(Sheet1.Cells(i, 2))
url = "TEXT;" & Sheet1.Cells(i, 2) & Sheet1.Cells(i, 3)
With Sheet1.QueryTables
If .Count < 1 Then
.Add url, Sheet1.Range("Z1")
Else
.Item(1).Connection = url
.Item(1).Refresh
' assuming column D would hold the results
Sheet1.Cells(i, 4) = Sheet1.Range("Z1")
' do any further manipulations of the fetched Sheet1
End With
i = i + 1
Loop