【问题标题】:Calling function in XLL file from C#从 C# 调用 XLL 文件中的函数
【发布时间】:2011-09-13 18:51:38
【问题描述】:

我有一个 xll 文件,它有一个函数,我想从 C# 调用该函数。 这个 xll 文件在 excel 中使用。任何人都知道如何做到这一点? 在 excel 中,如果我直接给出函数我得到正确的值。同样的事情如果我在 c# 中自动化 excel 并从 Microsoft.Office.Interop.Excel 打开 excel 并应用该函数我得到错误

【问题讨论】:

    标签: c# .net excel xls xll


    【解决方案1】:

    您可能无法直接调用该函数,因为 XLL 会期望 Excel 接口正在驱动。你必须做一些严肃的伪装。

    不过,通过 Excel 将其自动化是可行的。

    【讨论】:

    • 大卫感谢您提供的信息。如果我使用 excel 互操作通过 excel 自动化并在 xll 中应用公式,例如 oRng.Formula="=getnumber('abcd','IQ_COMPANY_ID')";我收到 com 异常错误。知道如何在启用 xll 的情况下打开 excel。
    • 我不知道。我对 XLL 或您如何驾驶它一无所知。
    【解决方案2】:

    xll 只是一个 dll。如果您知道要调用的函数的签名,则可以像调用任何其他函数一样调用它。如果您不知道签名但可以在 Excel 中加载加载项,有一种方法可以让 Excel 告诉您签名。

    只有在您运行 Excel 时,自动化才有效。知道签名后就不需要了。

    【讨论】:

      【解决方案3】:

      您可以使用一些工具:

      XLL Plus
      XLL Host


      这个问题在 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 2016-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多