Могу ли я получить поток из веб-запроса Excel VBA?

Я использую Excel VBA WebQuery, используя что-то похожее на этот пример: (Этот пример фактически скопирован здесь: http://support.microsoft.com/kb/213730, и я использую другой URL-адрес с разными аргументами POST)

Sub URL_Post_Query()

With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;http://webservices.pcquote.com/cgi-bin/excel.exe", _
    Destination:=Range("a1"))

    .PostText = _
        "QUOTE0=[""QUOTE0"",""Enter up to 20 symbols separated " & _
              "by spaces.""]"

   .BackgroundQuery = True
    .TablesOnlyFromHTML = True
    .Refresh BackgroundQuery:=False
    .SaveData = True
End With
End Sub

Мне нужно иметь возможность делать особенно большие запросы (например, скажем, я получаю информацию о ценах акций для 20 000 ценных бумаг), и когда я это делаю, Excel "блокируется" и не показывает никакого прогресса, пока он работает, хотя запрос завершается успешно.

Используя этот синтаксис, есть ли способ получить доступ к потоку данных, как он поступает? Это помогло бы 2 способам: я мог бы обрабатывать данные в небольших кусках по мере их получения, и я мог бы создать индикатор выполнения для отображения пользователю.

Спасибо.

+3
источник поделиться
3 ответа

Если вам нужно больше управления, вы можете переключиться с веб-запроса на что-то вроде использования экземпляра xmlhttp: это можно использовать асинхронно (не просто, но вполне возможно):

http://www.dailydoseofexcel.com/archives/2006/10/09/async-xmlhttp-calls/

Обратите внимание, что нет гарантии, что при отправке большого блока символов веб-служба возвращает ответ для каждого символа в отдельности: для серверов достаточно распространять содержимое буфера до полного ответа.

Возможно, вам лучше отказаться от ваших котировок в несколько запросов, каждый с меньшим количеством символов.

+1
источник

Если вы хотите получить полный доступ к результатам веб-вызова, вы можете открыть URL-адрес в качестве другой книги вместо использования веб-запроса.

См. мой ответ на этот вопрос: Как я могу отправить данные из веб-запроса Excel после завершения запроса?

Компромисс между этим подходом заключается в том, что вам нужно управлять обработкой данных, которые вы сами возвращаете, - Excel не будет помещать их в определенном месте назначения для вас. Но похоже, что с тобой все в порядке?

Это синхронный вызов, но вы получаете индикатор выполнения, поэтому лучше работать с пользователем.

Мы закончили этот маршрут после того, как попробовали что-то очень похожее на то, что вы, похоже, делали.

+1
источник

Если вы работаете с большим XML-документом, вы можете обнаружить, что обработка результатов с помощью SAX, а не DOM делает вещи менее склонными к замораживанию. Вы можете найти этот ответ для соответствующего вопроса

0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос