3

この例に似たものを使用して、Excel VBAの WebQuery を使用しています。

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 つの方法で役立ちます。受信したデータを小さなチャンクで処理することと、ユーザーに表示する進行状況メーターを作成することです。

ありがとう。

4

3 に答える 3

1

Web 呼び出しの結果に完全にアクセスしたい場合は、Web クエリを使用する代わりに、URL を別のワークブックとして開くことができます。

この質問に対する私の回答を参照してください:クエリが完了したときに、Excel Web クエリからのデータを後処理するにはどうすればよいですか?

このアプローチのトレードオフは、取得したデータの処理を自分で管理する必要があることです。Excel はデータを特定の宛先に配置しません。しかし、それはあなたにとって多分大丈夫だと思いますか?

これは同期呼び出しですが、プログレス バーが表示されるため、ユーザー エクスペリエンスが向上します。

あなたがしているように見えることとかなり似たようなことを試みた後、私たちはこのルートにたどり着きました.

于 2015-10-06T16:08:20.490 に答える
1

さらに制御したい場合は、Web クエリから xmlhttp のインスタンスを使用するようなものに切り替えることができます。これは非同期で使用できます (非常に単純ではありませんが、非常に実行可能です)。

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

シンボルの大きなブロックを送信したときに、Web サービスが各シンボルの応答を個別に返すという保証はないことに注意してください。応答全体が完了するまでサーバーがコンテンツをバッファリングするのは一般的です。

見積もりを複数のリクエストに分割し、それぞれのシンボル数を減らしたほうがよい場合があります。

于 2011-08-12T16:22:35.087 に答える
0

大きなXMLドキュメントを使用している場合は、DOMではなくSAXを使用して結果を処理すると、フリーズしにくくなることがあります。関連する質問に対するこの回答が役立つ場合があります

于 2011-08-13T04:01:37.940 に答える