如何在没有Excel的情况下从C#使用ExcelDNA开发的XLL

时间:2018-10-04 21:08:07

标签: c# excel excel-dna

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

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

是否通过ExcelDna.Integration dll(是.net程序集)完成了?

谢谢

1 个答案:

答案 0 :(得分:4)

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

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

换句话说,在您的.dna文件中,Excel-DNA使用它来确定要加载的内容,您将看到以下内容:

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

YourAssembly.dll已经是.NET程序集,其中包含暴露给Excel-DNA的功能。


更重要的是,如果您知道要为功能使用不同的.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

diagram

在上面的示例中:

  • Functions.dll不会引用任何Excel-DNA程序集,并且不会通过COM公开任何内容。它应该具有尽可能少的依赖关系(理想情况下没有!)

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

  • FunctionsComInterop.dll建立了通往C ++的桥梁,并公开了可由C ++应用程序调用的COM函数。这些功能只是将调用转发到Functions.dll程序集……仅此而已。