进行网络调用的Excel UDF:如何提高性能

时间:2017-02-12 13:13:29

标签: vba excel-vba xll excel

我编写了一个excel udf来调用web api,我希望通过将web api调用捆绑在一起而不是让函数的每个实例进行独立调用来刷新函数值时提高整体性能。我在想,当触发数据刷新时,我可以在打开的工作簿中计算我的udf实例的数量,收集需要更新的数据的标识符,并且只有当我的计数器达到udf实例的数量时,执行web api调用。有关更有效方法的任何建议吗?

3 个答案:

答案 0 :(得分:0)

我的基于Excel-DNA的Addin [1]向quandl.com和tiingo.com发出HTTP GET请求,并打开websockets到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

答案 1 :(得分:0)

@noplace:过去我实现了一个XLL,它通过工作表跟踪UDF调用。工作表是根据实时市场数据计算期权价格,我需要确保在允许下一个市场数据触发的计算周期开始之前所有计算都已完成。更一般地说,您面临的问题是确定UDF调用的时间和顺序的Excel依赖图引擎是一个黑盒子。因此,您无法对时间和顺序做出假设。所以我建议你有两套UDF。第一组填充您的列表,并填充后台数据集合。数据收集结果将进入代码中的缓存。第二组UDF从缓存中提取数据。您可能希望使这些易失性或可能使用触发器参数,以便您可以控制它们的调用。在SSAddin中,我使用RTD将触发器推回到电子表格中,然后可以调用缓存读取UDF。所有这些都是在我上面提供的SSAddin链接中编码的。

答案 2 :(得分:0)

如果你说我有重复,那就停止吧!有一个工作表,其作用是网络调用一次,然后工作簿中的其他用途可以参考结果。

可以一次计算一张纸,在这种情况下我会这样做,或者至少在重新计算整个工作簿之前重新计算网络api表。

相关问题