为所有的Excel版本构build一个加载项和UDF

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

1)它可以安装在桌面上。 它在function区中添加了一个菜单和button,还提供了一些特定的function(获取实时数据,如彭博function)。

2)插件应该在Excel 2007,2010,2013和2016中工作。

问题是应该使用哪种技术来创build这个加载项。 这是我的一些想法:

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

2)VSTO。 有谁知道VSTO插件是否适用于Excel 2013和2016? ; 是否有可能build立一个适用于所有Excel 2007,2010,2013和2016的VSTO加载项?

3)Excel的C API。 看来C的Excel for Excel是用来构buildXLL的。 有谁知道如果Excel的C API可以build立菜单和button?

这里有一些要点:

  1. JavaScript API,它们是基于Web的插件,因此,如果没有Internet,您的加载项将无法工作,但似乎您的解决scheme是针对数据提供商的,所以我假设您的客户将拥有互联网。 正如你所说,2013年版本之前并不适用。 看到这里

  2. VSTO,可能是最好的select,但您需要了解Excel 2013和以前版本之间与MDI / SDI相关的主要更改。 其他一些小的调整可能会出现(图像idmso,一些事件..)但VSTO 2007应该是2016年兼容。 VSTO 2016不存在,最新版本是2010(版本4.0运行时)。 您应该在开发期间定期进行testing以检查兼容性。

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

从我的angular度来看,你有两种可能性:1)通过VSTO实现所有的事情; 2)通过Excel C API实现你的例程,并通过VSTO插件与它进行交互。 我会build议你的第一个解决scheme(VSTO),你会发现更多的文件。

编辑:

刚刚意识到你的问题也是关于UDF的。 有三种方式可以将UDF添加到Excel中:通过VBA,通过COM自动化和通过Excel C API。 UDF的最佳select是EXCEL C API,但是存在一个开源项目,可以在C#中“包装”这个API,参见Excel DNA。

编辑2:

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

Interesting Posts