【问题标题】:How to match XLL for XLL compatible custom functions [Spoiler: you don't]如何为 XLL 兼容的自定义函数匹配 XLL [剧透:你不知道]
【发布时间】:2019-11-26 13:58:38
【问题描述】:

为了实现与现有 XLL 的兼容性,我想在我的 Excel 加载项清单中标识等效的 XLL。我现有的加载项使用 XLL 技术,但它是通过使用 Add-In Express 的 3rd 方库来实现的。因此,在我的情况下,自定义函数也包含在 dll 中,该 dll 还包含加载项的 COM UI 部分。所以我没有物理xll文件。

由于我找到了等效 COM 加载项的信息,因此 Excel 在以下位置搜索匹配的 ProgId

  • 计算机\HKEY_CURRENT_USER\Software\Microsoft\Office\Excel\Addins
  • 计算机\HKEY_LOCAL_MACHINE\Software\Microsoft\Office\Excel\Addins

Excel 在哪里寻找匹配的 XLL 文件?

我想看看 Add-In-Express 在那里添加了什么,然后使用它来引用它作为 XLL 等效项的 FileName。

【问题讨论】:

    标签: excel office-js custom-function custom-functions-excel addin-express


    【解决方案1】:

    要为您的 Office-JS-Excel 加载项启用与 XLL 兼容的自定义函数,请按照文档中的说明将相应的 EquivalentAddin 标记添加到您的清单中。

    https://docs.microsoft.com/en-us/office/dev/add-ins/excel/make-custom-functions-compatible-with-xll-udf

    XLL 类型的 EquivalentAddin 的声明可实现兼容性。如果有 XLL 自定义函数,它们仅通过函数名称匹配,不匹配特定 XLL。因此,您在 FileName 标记中添加什么并不重要。

    【讨论】:

      【解决方案2】:

      ProdId 是匹配的关键。您可以将占位符名称作为文件名,它应该可以工作。

      请注意,在注册兼容函数之前,不应注册和加载真实 XLL 的函数,这一点很重要。否则,以下兼容函数无法覆盖现有 XLL 函数。真正的 XLL 函数总是优先于兼容的函数。

      【讨论】:

      • 好的,文档 (docs.microsoft.com/en-us/office/dev/add-ins/excel/…) 明确告诉使用文件名作为 XLL 等效项的匹配标准,但是好的,我会尝试。
      • 但是我应该如何(尤其是在客户端计算机上高效运行时)确保 Excel 以何种顺序注册和加载两种不同类型的加载项? Excel 不应该自己解决这个问题吗?
      • 我如何识别到底是什么情况?我有一个没有自动完成的 XLL 功能,但是 XLL 兼容版本提供了自动完成。因此,如果我执行该函数并返回 XLL 的结果(OJS 返回不同的结果以区分哪个被调用),那么我知道 XLL 被调用了。但有什么办法?我猜,如果自动补全不可用,XLL 只是默认获胜,它与兼容函数之间没有成功匹配。如果等效标记匹配,我希望自动完成和 XLL 的结果。我说的对吗?
      • 在使用 XLL(使用 ExcelDna 创建)对我进行测试时,现在看来,只要 XLL 类型有等效标记,XLL 函数似乎就会替换加载项,匹配它们仅通过函数名称(不区分大小写),无论如何或配置什么来匹配某个 XLL 加载项。所以也许这就是你试图在你的帖子中解释的内容。
      • 我期待我的结论得到证实或驳斥。提前致谢。
      【解决方案3】:

      Excel->File->Options->Add-ins 是查看和管理 Microsoft Office 插件(包括 COM 插件和 Excel-Addin)的正确位置吗?

      【讨论】:

      • 谢谢,我当然知道那个对话框。只是,因为我发现了有关查找 COM 加载项的 ProgIds 的位置的非常具体的信息,所以我想知道 XLL 是否有这样的具体信息。文件名,在你提到的对话框位置列中的值的末尾,是要匹配的文件名吗?如果这个名称不匹配,就没有办法按名称匹配?
      • 假设您在 Excel 自定义函数等效 XLL 案例中要求匹配 XLL。是的,在等效 XLL 情况下,您可以在对话框中位置列中的值末尾使用文件名。
      猜你喜欢
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 2010-09-27
      • 1970-01-01
      相关资源
      最近更新 更多