2

我发布此内容是为了详细说明从 VBA 运行某些 C# 函数(已编译)的选项。

到目前为止,我已经尝试过XLWExcel DNA。这两者都使您能够构建一个 .xll,您可以从 Excel 会话中引用它来使用(Excel DNA更好更容易。它仍然受支持,而 XLW 自 .net 3 以来没有看到任何更新,需要 VS2008 或2005 带有某些要运行的模板)。

据我了解,XLL 存在一个问题,因为它们无法集成到电子表格中,需要单独加载。

  1. 无论如何将 C# 编译的代码嵌入到电子表格而不是 Excel 会话中以使 VBA 插件“独立”/“开箱即用”工作?
  2. 否则是否可以在运行时从 VBA 加载 XLL?这样做有没有潜在的风险?
  3. 关于 C#/VBA 互操作的任何提示值得一提?

谢谢 !

4

1 回答 1

1

我过去使用的一种解决方案是开发 VSTO 2005 .xls 文档,将其转换为 .xla,并使用类似于 Paul Stubbs 的这篇博客文章中描述的技术来获取对 COMVisible .NET 的引用来自 VBA 的代码。

我首选的解决方案是:

  • 在 IDL 中定义要在 .NET 中实现的 COM 接口,并从中构建一个类型库。

  • 将此类型库导入 .NET 项目,并创建实现所需接口的具体类。

  • 使用链接博客文章中描述的技术将工厂类实例返回到 VBA。一旦 VBA 有了这个工厂类实例,它就可以使用它来获取所有 API。

通过使用 IDL 手动定义 COM 接口,您的 VBA 代码将只需要引用这些,而不是引用从 COM 可见的 .NET 程序集生成的类型库,从而避免了很多版本控制问题。

于 2012-07-13T15:56:16.920 回答