实现可以asynchronous调用Web方法的Excel UDF

最初,我实现了一个可以同步调用Web方法的UDF,但是却遇到了很多麻烦,特别是当我试图请求大量数据时 – 简而言之, Excel会挂起并冻结,直到检索到所有数据严重危害用户体验。

我猜测同步使用Web服务是真正的杀手锏。 所以我想知道是否有任何方法可以asynchronous执行 ? 任何人都可以给我一些指针? 任何工具或平台更受欢迎? (我个人更喜欢使用C#)

RTD可以工作。 你必须实现IRtdServer接口。 当你的加载项开始时,Excel会给你一个函数指针。 对于每个单元格,您将得到一个“excel id”和一个参数列表。 发送您的asynchronousWeb请求。 当响应到达时,您调用Excel给您的notfiy函数。 当Excel准备就绪时,它会调用你的GetData方法来获取数据。

请参阅如何使用RtdServer在C#中创build实时Excel自动化加载项? 有关如何在C#中执行此操作的示例。

一旦你了解了RTD是如何工作的,Excel-DNA在提取COMpipe道方面做得非常好。

我对该技术没有经验,但似乎Excel RTD (实时数据)可能是一种方法。 看看这个线程相关的ExcelDNA概述了一种方法。 希望这可以帮助!

我不使用C#与Excel,只是VBA,但我想象类似的约束适用。 通过udf调用远程的问题(特别是当你这么做的时候)是工作簿开始变得没有响应,而且你不能控制计算的发生。 但是,即使你可以弄清楚如何asynchronous运行你的udf,也可能会破坏Excel内部跟踪如何计算工作簿来处理单元依赖关系。

在服务器上正在做什么计算? 你能不能把它们移到一个加载项中来提高UDF的性能?

如果你不能这样做,那么你可以尝试一个事件驱动的方法(例如使用前面提到的工作表变化事件),但是仍然有困难,你可能需要确保整个工作表完全计算完毕,这样做可能会更有价值。 不要忘记,即使在asynchronous运行时,您的操作系统可以一次打开多less个连接也是有限制的,所以不会像一次发送数十个单元的呼叫…

这里有一个很好的例子教程。