c# - 如何在没有 Excel 的情况下使用 ExcelDNA 从 C# 开发的 XLL
问题描述
我们已经使用 ExcelDna 在 C# 中构建了 XLL,如https://excel-dna.net/中所述——从 Excel 测试时一切正常。
我们希望能够在其他 .NET 项目中使用这个 XLL——换句话说,我们如何从 .NET“托管”这个 XLL?XLL 似乎不是有效的 .NET 程序集——因此我无法将其作为 .NET 引用添加到其他项目
它是通过 ExcelDna.Integration dll 以某种方式完成的(这是一个 .net 程序集)吗?
谢谢
解决方案
Excel-DNA 只是 Excel 和 .NET 程序集之间的粘合剂。
如果您想重用由 Excel-DNA 加载项(即XLL
)加载的 .NET 程序集内的功能,那么您不需要XLL
任何东西......您所需要的只是 .NET 程序集正在XLL
加载 - 在您的 .NET 应用程序中添加对它的引用,您就可以开始了……就像您对任何其他类库所做的一样。
换句话说,在.dna
Excel-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
程序集......仅此而已。
推荐阅读
- r - 我收到错误“矩阵上的下标数量不正确”
- python - pyspark 比较数据中的列(current_week(YYYYXX),其中 XX 是周数)与当前系统周数(今天的周数)
- ios - 为什么 TCP socket.connect 调用仅在 4g 网络中的 ios13 上失败?
- java - 使用 MyBatis 访问新插入对象的关联的正确方法
- javascript - Webpack 5 模块联合 - 远程模块中的挂钩 - 不起作用
- c# - 如何在 Xamarin 中创建适合所有屏幕尺寸的启动画面
- sql - 是否可以在保持十进制形式的情况下在 SQL 中舍入小于 1 的数字
- c - 指向整数的不兼容指针是什么意思?
- angular - scss 规则未显示在检查器中
- windows - docker将入口点路径解释为相对路径?