为所有Excel版本构建加载项和UDF

时间:2016-11-08 02:20:06

标签: excel vsto excel-addins xll custom-functions-excel

一个数据提供商想要开发Excel加载项,这些是要求:

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

2)加载项应该在Excel 2007,2010,2013和2016中有效。

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

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

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

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

1 个答案:

答案 0 :(得分:1)

以下是一些要点:

  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的基础)。自2007版以来,Excel C API没有发生变化,因此它将与所有版本完全兼容。您可以在文档GENERIC.C中的Excel C API 2010 SDK(2013年SDK中的不是 - 已删除此部分)中找到一个工作示例,请参阅xlAutoOpen功能。另请注意,很难找到有关它的信息。

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

    编辑:

    刚刚意识到你的问题也是关于UDF的。将UDF添加到Excel有三种方法:通过VBA,通过COM自动化和Excel C API。 UDF的最佳选择绝对是EXCEL C API,但是存在一个开源项目,即#34; wrap"在C#中使用此API,请参阅Excel DNA。

    编辑2:

    作为VSTO的替代品,仍然在Net中,NetOffice project on Codeplex值得尝试,他们声称它们支持所有Excel版本。它不会对UDF部分提供帮助,但对于GUI来说它似乎是一个很好的候选者。