为所有 Excel 版本构建插件和 UDF

Build an add-in and UDF for all the Excel versions

一位数据提供者想要开发一个 Excel 插件,这些是要求:

1) 可以安装在桌面上。它在Ribbon中增加了一个菜单和按钮,它还提供了一些特定的功能(获取实时数据,如Bloomberg功能)。

2) 该加载项应在 Excel 2007、2010、2013 和 2016 年运行。

问题是应该使用哪种技术来创建此加载项。以下是我的一些想法:

1) JavaScript API 不适合 Excel,因为它不适用于 Excel 2007、2010。

2) VSTO。 有谁知道 VSTO 加载项是否适用于 Excel 2013 和 2016?是否可以构建一个适用于所有 Excel 2007、2010、2013 和 2016 的 VSTO 插件?

3) C API 为 Excel。似乎 C API for Excel 用于构建 XLL。 有谁知道 C API for Excel 是否可以构建菜单和按钮?

这里有几点:

  1. JavaScript API ,它们是基于网络的加载项,因此您的加载项在没有互联网的情况下无法工作,但您的解决方案似乎是针对数据提供商的,所以我假设您的客户将拥有互联网。如您所说,它不适用于 2013 之前的版本。参见 here

  2. VSTO,可能是最好的选择,但您需要注意 Excel 2013 和之前版本之间与 MDI/SDI 相关的重大变化。其他小的调整可能会出现(图像 idmso,一些事件..)但 VSTO 2007 应该与 2016 兼容。 VSTO 2016 不存在,最新版本是 2010(版本 4.0 运行时)。您应该在开发期间定期测试它以检查兼容性。

  3. 可以通过 Excel C Api 添加菜单(下拉列表)和工具栏(使用 xlfAddMenuxlfAddToolbar) 但不是需要 COM 接口 IRibbonExtensibility 的功能区控件。 因此,将控件添加到rubbon 的唯一方法是通过COM 技术(VSTO 基于此)。 Excel C API 自 2007 版本以来没有改变,因此它将完全兼容所有版本。您可以在 Excel C API 2010 SDK 中找到一个工作示例(not in the 2013 SDK -this part已被删除),在文件 GENERIC.C 中,请参阅 xlAutoOpen 函数。另请注意,很难找到有关它的信息。

从我的角度来看,您有两种可能性:1) 通过 VSTO 实现所有内容或 2) 通过 Excel C API 实现您的例程并通过 VSTO 与其交互仅用于功能区控件的插件。我建议您使用第一个解决方案 (VSTO),您会找到更多关于它的文档。

编辑:

刚意识到你的问题也是关于UDF的。可以通过三种方式将 UDF 添加到 Excel:通过 VBA、通过 COM 自动化和通过 Excel C API。 UDF 的最佳选择无疑是 EXCEL C API 但存在一个开源项目 "wrap" 这个 API 在 C# 中,请参阅 Excel DNA。

编辑 2:

作为VSTO的替代品,还是在Net中,有一个值得一试的NetOffice project on Codeplex,他们声称支持所有Excel版本。对于 UDF 部分,它不会帮助您,但对于 GUI,它似乎是一个不错的选择。