首页 > 解决方案 > 如何在没有 Excel 的情况下使用 ExcelDNA 从 C# 开发的 XLL

问题描述

我们已经使用 ExcelDna 在 C# 中构建了 XLL,如https://excel-dna.net/中所述——从 Excel 测试时一切正常。

我们希望能够在其他 .NET 项目中使用这个 XLL——换句话说,我们如何从 .NET“托管”这个 XLL?XLL 似乎不是有效的 .NET 程序集——因此我无法将其作为 .NET 引用添加到其他项目

它是通过 ExcelDna.Integration dll 以某种方式完成的(这是一个 .net 程序集)吗?

谢谢

标签: c#excelexcel-dna

解决方案


Excel-DNA 只是 Excel 和 .NET 程序集之间的粘合剂。

如果您想重用由 Excel-DNA 加载项(即XLL)加载的 .NET 程序集内的功能,那么您不需要XLL任何东西......您所需要的只是 .NET 程序集正在XLL加载 - 在您的 .NET 应用程序中添加对它的引用您就可以开始了……就像您对任何其他类库所做的一样。

换句话说,在.dnaExcel-DNA 用来确定要加载的内容的文件中,您有如下内容:

<DnaLibrary Name="Your Add-In" RuntimeVersion="v4.0">
  <ExternalLibrary Path="YourAssembly.dll" ExplicitExports="false" ... />
</DnaLibrary>

YourAssembly.dll已经是包含暴露给 Excel-DNA 的函数的 .NET 程序集。


更重要的是,如果你知道你的函数将有不同的 .NET“客户端”,那么你应该为此设计,将可重用函数隔离在一个专用程序集中,并让你的 Excel-DNA 程序集引用它,并公开Excel 的功能,而不是强迫客户依赖 Excel-DNA 程序集。

例如

  • C# 类库Functions.dll(不引用任何内容)
  • C# 类库ExcelAddIn.dll(参考Functions.dll
  • C# 应用程序MyCsApp.exe(参考Functions.dll
  • C# 类库FunctionsComInterop.dll(参考Functions.dll
  • C++ 应用程序MyCppApp.exe(调用FunctionsComInterop.dll
  • 等等

图表

在上面的例子中:

  • Functions.dll不引用任何 Excel-DNA 程序集,也不通过COM 公开任何内容它应该有尽可能少的依赖(最好没有!)

  • ExcelAddIn.dll架起了通往 Excel-DNA 的桥梁,并公开了 Excel 可以通过 Excel-DNA 调用的 Excel 函数。这些函数只是将调用转发给Functions.dll程序集......仅此而已。

  • FunctionsComInterop.dll搭建到 C++ 的桥梁并公开可由 C++ 应用程序调用的 COM 函数。这些函数只是将调用转发给Functions.dll程序集......仅此而已。


推荐阅读