3

我正在使用 Excel VBA 的 WebQuery,使用类似于此示例的内容:(此示例实际上是从此处复制粘贴的:http: //support.microsoft.com/kb/213730,我使用具有不同 POST 参数的不同 URL)

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 “锁定”并且在它工作时不显示任何进度,尽管查询确实成功完成。

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

谢谢。

4

3 回答 3

1

如果你想要更多的控制,你可以从 web 查询切换到使用 xmlhttp 的实例:这可以异步使用(不是超级简单,但非常可行):

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

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

您最好将您的报价分成多个请求,每个请求的符号数量较少。

于 2011-08-12T16:22:35.087 回答
1

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

请参阅我对这个问题的回答:查询完成后,如何对 Excel Web 查询中的数据进行后处理?

这种方法的权衡是您必须自己管理处理您取回的数据 - Excel 不会为您将其放入给定的目的地。但听起来你可能没问题?

这是一个同步调用,但您确实会看到一个进度条,因此用户体验更好。

在我们尝试了与您似乎一直在做的非常相似的事情之后,我们最终选择了这条路线。

于 2015-10-06T16:08:20.490 回答
0

如果您正在处理大型 XML 文档,那么您可能会发现通过 SAX 而不是 DOM 处理结果会使事情不太容易冻结。您可能会发现相关问题的答案很有用

于 2011-08-13T04:01:37.940 回答