【发布时间】:2011-09-13 18:51:38
【问题描述】:
我有一个 xll 文件,它有一个函数,我想从 C# 调用该函数。 这个 xll 文件在 excel 中使用。任何人都知道如何做到这一点? 在 excel 中,如果我直接给出函数我得到正确的值。同样的事情如果我在 c# 中自动化 excel 并从 Microsoft.Office.Interop.Excel 打开 excel 并应用该函数我得到错误
【问题讨论】:
我有一个 xll 文件,它有一个函数,我想从 C# 调用该函数。 这个 xll 文件在 excel 中使用。任何人都知道如何做到这一点? 在 excel 中,如果我直接给出函数我得到正确的值。同样的事情如果我在 c# 中自动化 excel 并从 Microsoft.Office.Interop.Excel 打开 excel 并应用该函数我得到错误
【问题讨论】:
您可能无法直接调用该函数,因为 XLL 会期望 Excel 接口正在驱动。你必须做一些严肃的伪装。
不过,通过 Excel 将其自动化是可行的。
【讨论】:
xll 只是一个 dll。如果您知道要调用的函数的签名,则可以像调用任何其他函数一样调用它。如果您不知道签名但可以在 Excel 中加载加载项,有一种方法可以让 Excel 告诉您签名。
只有在您运行 Excel 时,自动化才有效。知道签名后就不需要了。
【讨论】:
您可以使用一些工具:
这个问题在 MSDN Use XLL from C# 上也有人问过,答案是这样的:
如果是 COM 项目,您可以通过添加引用窗口中的 COM 选项卡添加它。
如果您需要从 dll 创建 .NET 程序集,您可以尝试使用类型库导入工具在 dll 周围创建一个包装器:
tlbimp.exe xll.dll /out:xllnet.dll
如果对象不支持 COM,而只支持本机调用,则需要使用 DllImport 属性调用平台方法。有关详细信息,请参阅平台调用教程。
我尝试了所有 3 条建议,但没有任何运气。鉴于 XLL 工具 Excel-DNA 的作者建议使用我怀疑在 Winform/WPF/Console 或 Web 应用程序中使用 XLL 的工具并非易事: https://stackoverflow.com/a/2865023/495455
【讨论】: