2017-02-12 6 views
-2

Web APIを呼び出すexcel udfを作成しましたが、Web API呼び出しの代わりにWeb API呼び出しを一緒にバンドルして関数値をリフレッシュするときの全体的なパフォーマンスを向上させたい機能の各インスタンスが独立した呼び出しを行う。データのリフレッシュが発生したときに、開いているワークブック内の自分のudfのインスタンス数をカウントし、更新が必要なデータの識別子を収集し、カウンタがudfインスタンスの数に達したときにのみWeb API呼び出しを実行する。より効果的なアプローチに関する提案はありますか?ネットワークコールを行うExcel UDF:パフォーマンスを向上させる方法

+4

お手伝いをします。 **あなたの現在のコードを投稿する**。 –

+0

現在、私はコードの作成をサポートしていませんでした。最も説得力のあるものを実装するための選択肢を特定しようとしていました。 – noplace

+2

「私はexcel udfを書いた」、「まだコードを書いていない」 - そう? – YowE3K

答えて

0

My Excel-DNAベースのAddin [1]は、quandl.comとtiingo.comにHTTP GETリクエストを行い、リアルタイム更新のためにtiingo.comにウェブソケットを開きます。 HTTP GETリクエストはバックグラウンドワーカースレッドに渡され、バックグラウンドワーカースレッドは同期処理され、結果がキャッシュされます。シンプルなワークシート関数は、キャッシュから結果をセルに取り込みます。 websocketの更新は、RTDによってセルにプッシュされます。すべてのソースはgithub [1]にあります。 C#でコーディングする場合は、Excel-DNA [2]をお勧めします。

[1] https://github.com/SpreadServe/SSAddin

[2] https://github.com/Excel-DNA/ExcelDna

+0

これを正しく実行すると、バックグラウンドではソースからデータを取得し、UDFはワークシートをすぐにローカルで使用可能なデータでタイムリーに更新するワーカースレッドがあります。 私は何を考えていたのですか?UDFに何らかのデータを取り込む必要があり、すべてのUDFがこのリストに「投稿」されている場合にのみデータを取得します。この作業を正しく行うには、Excelワークシートで使用されているUDFの数を正確に把握する必要があります。 私のアイデアに関するコメントはありますか? – noplace

0

@noplace:過去のIワークシートによってUDF呼び出しを追跡XLLを実装しています。ワークシートはリアルタイムの市場データに応じてオプション価格を計算していました。次の市場データのトリガによる計算サイクルを開始する前に、すべての計算が完了していることを確認する必要がありました。より一般的に言えば、UDF呼び出しのタイミングと順序を決定するExcelの依存関係グラフエンジンはブラックボックスです。したがって、タイミングと順序については仮定することはできません。だから、私はあなたが2組のUDFを持っていることをお勧めします。最初のセットはリストを作成し、背景データの収集を準備します。データ収集結果は、コード内のキャッシュに格納されます。 UDFの第2セットは、キャッシュからデータを引き出す。これらを揮発性にするか、トリガーパラメータを使用して呼び出しを制御できるようにすることができます。 SSAddinでは、RTDを使用してトリガーをスプレッドシートにプッシュし、次にキャッシュ読み取りUDFの呼び出しを引き起こします。これらはすべて上記のSSAddinリンクでコード化されています。

+0

私はあなたのことが理性の理想的な例だと信じています。ネットワーク通話を最適化したい場合は、要求されたすべてのマーケットシンボルの更新データを取り込むことをバンドルしたいと考えています。 (1)新しいUDF呼び出しを追加する(参照されたマーケットシンボルが新規であるか、すでにリストに入っているかどうかを理解する必要がある)、(2)UDFを削除する(3)あなたのUDFへの呼び出しで保存されたワークシートを開くこと。あなたのアドインを調べます。 – noplace

0

重複があると言っている場合は、それをやめてください!ネットワークが一度呼び出された後、ブック内の他の用途が結果を参照できるようにする役割を持つ単一のシートを用意します。

この場合、シートを1枚ずつ計算することができます。または、ネットワークのapiシートを最初に再計算してから、ブック全体を再計算してください。

+0

これは意味をなさないかもしれませんが、同じシートであっても重複する可能性があります。ここでの目的は、ネットワークトラフィックを最適化することでしたが、サーバー側のワークロードを最適化することで、同じデータの同じExcelクライアントからの複数の要求を回避しました。 – noplace

関連する問題