2011-09-19 31 views
5

起初,我實現了,將調用Web方法同步方式的UDF,但有相當多的與煩惱,尤其是當我試圖請求龐大的數據量 - 簡而言之,Excel將掛起並凍結,直到檢索到所有數據,這嚴重危害用戶體驗。實現一個Excel UDF可以調用Web方法異步

我猜測同步使用Web服務是真正的殺手鐗。所以我想知道是否有什麼辦法可以做到這一點異步?任何人都可以給我一些指點嗎?任何工具或平臺更受歡迎? (我個人更喜歡使用C#)

+0

似乎udf需要返回兩次才能正常工作:一次在開啓Web通話後再次返回結果。可能更好地使用工作表更改事件來完成調用? –

+0

@Tim你能詳細解釋一下嗎?有沒有例子呢? – woodykiddy

回答

5

RTD可以工作。你必須實現IRtdServer接口。當你的加載項開始時,Excel會給你一個函數指針。對於每個單元格,您將獲得「excel id」和參數列表。發送您的異步Web請求。當響應到達時,您可以調用Excel提供的notfiy函數。當Excel準備就緒時,它會調用您的GetData方法來實際獲取數據。

有關如何在C#中執行此操作的示例,請參見How do I create a real-time Excel automation add-in in C# using RtdServer?

一旦你瞭解RTD是如何工作的,Excel-DNA在抽象化COM管道方面做得很好......強烈推薦。

+0

感謝您的鏈接。我認爲這會有所幫助。 – woodykiddy

0

我不使用c#與Excel,只是VBA,但我想象類似的約束適用。通過udf調用遠程的問題(尤其是當你這麼做的時候)是工作簿開始變得沒有響應,並且你無法控制計算的發生。但是,即使您可以弄清楚如何異步運行udf,它也可能會破壞Excel內部跟蹤如何計算工作簿來處理單元依賴關係。

在服務器上進行了哪些計算?你可以將它們移動到一個加載項中,從而提高UDF的性能嗎?

如果你不能這樣做,那麼你可以嘗試一種事件驅動的方法(例如,使用前面提到的工作表變化事件),但是仍然有困難,你可能需要確保整個工作表最終結束完全計算,並且這樣做可能比它的價值更多的工作。不要忘記,即使在異步運行時,您的操作系統可以一次打開多少個連接也是有限制的,所以它不像您一次可以發送數十個單元的呼叫...

1

I對該技術沒有經驗,但似乎Excel RTD(實時數據)可能是一種方法。查看與ExcelDNA相關的this thread,其中概述了一種方法。希望這可以幫助!

0

一個很好的教程與例子可用here