【问题标题】:Implement an Excel UDF that can call web methods asynchronously实现一个可以异步调用 web 方法的 Excel UDF
【发布时间】:2011-11-20 02:00:16
【问题描述】:

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

我猜想同步消费 Web 服务才是真正的杀手锏。所以我想知道是否有任何方法可以异步?谁能给我一些指示?有什么工具或平台更受欢迎? (我个人还是更喜欢用 C#)

【问题讨论】:

  • 似乎 udf 需要返回两次才能正常工作:一次在启动网络调用后,再次在结果到达时返回。使用工作表更改事件来进行调用会更好吗?
  • @Tim 你能详细解释一下吗?有没有这方面的例子?

标签: c# excel vsto user-defined-functions


【解决方案1】:

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

有关如何在 C# 中执行此操作的示例,请参阅 How do I create a real-time Excel automation add-in in C# using RtdServer?

一旦您了解了 RTD 的工作原理,Excel-DNA 就可以很好地抽象出 COM 管道……强烈推荐。

【讨论】:

  • 感谢您的链接。我认为这会有所帮助。
【解决方案2】:

我没有使用该技术的经验,但似乎Excel RTD(实时数据)可能是一种方法。查看与 ExcelDNA 相关的this thread,其中概述了一种方法。希望这可以帮助!

【讨论】:

    【解决方案3】:

    我不将 c# 与 Excel 一起使用,只使用 VBA,但我想类似的约束也适用。通过 udf 远程调用某些东西的问题(特别是当您经常这样做时)是工作簿开始变得无响应,并且您无法控制计算的发生方式。但是,即使您能弄清楚如何异步运行 udf,它也可能会破坏 Excel 对如何计算工作簿以处理单元依赖关系的内部跟踪。

    服务器上正在执行哪些计算?您能否将它们移动到插件中,从而提高 UDF 的性能?

    如果您不能这样做,那么您可以尝试一种事件驱动的方法(例如,使用前面提到的工作表更改事件),但您仍然有可能需要确保整个工作表完全结束的困难经过计算,这样做可能比它的价值更多。也不要忘记,即使在异步运行时,您的操作系统可以一次性打开多少个连接也是有限制的,因此您不能一次发送数十个单元的调用...

    【讨论】:

      【解决方案4】:

      here 提供了一个很好的示例教程。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-13
        相关资源
        最近更新 更多