我可以从Excel VBA Web查询获取stream吗?

我正在使用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“locking”,并且在工作时不显示任何进度,尽pipe查询成功完成。

使用这种语法,有什么办法可以访问数据stream,因为它正在进入? 这将有两个方面的帮助:我可以在接收时以较小的块处理数据,我可以创build一个进度表来显示给用户。

谢谢。

如果你想更多的控制,你可以从网页查询切换到像使用xmlhttp实例:这可以asynchronous使用(不是超简单,但相当可行):

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

请注意,当您发送大块符号时,webservice不能保证每个符号都会单独返回响应:服务器通常会caching内容,直到整个响应完成。

您可能会更好地将您的报价分成多个请求,每个请求的符号数量较less。

如果要完全访问Web调用的结果,则可以将URL作为另一个工作簿打开,而不是使用Web Query。

查看我对此问题的回答: 如何在查询完成后从Excel Web查询中后处理数据?

这种方法的权衡是你必须pipe理处理你自己拿回来的数据–Excel不会把它放在你给定的目的地。 但是这听起来可能对你有好处?

这是一个同步调用,但你得到一个进度条,所以用户体验更好。

在我们尝试了一些与您似乎已经做过的事情非常相似的事情之后,我们最终走上了这条路。

如果您正在处理一个大型的XML文档,那么您可能会发现通过SAX而不是DOM来处理结果使事情变得不那么容易冻结。 你可能会发现这个答案是一个有用的问题