使用 XLL 加载项扩展自定义函数
注意
XLL 加载项是文件扩展名为 .xll 的 Excel 加载项文件。 XLL 文件是一种动态链接库, (DLL) 文件,只能由 Excel 打开。 XLL 加载项文件必须以 C 或 C++ 编写。 有关详细信息,请参阅 开发 Excel XL 。
如果你有现有的 Excel XLL 加载项,则可以使用 Excel JavaScript API 生成等效的自定义函数加载项,以将解决方案功能扩展到其他平台,例如Excel web 版或 Mac。 但是,Excel JavaScript API 加载项并不具有 XLL 加载项中提供的所有功能。根据解决方案使用的功能,XLL 加载项在 Windows 上的 Excel 中提供的体验可能比 Excel JavaScript API 加载项更好。
重要
以下平台和应用程序支持等效的外接程序功能。 COM 加载项不能安装在任何其他平台上,因此,在这些平台上, EquivalentAddins
将忽略本文稍后讨论的 manifest 元素。
在清单中指定等效的 XLL
若要启用与现有 XLL 加载项的兼容性,请在 Excel JavaScript API 加载项的清单中标识等效的 XLL 加载项。 然后,在 Windows 上运行时,Excel 将使用 XLL 加载项函数,而不是 Excel JavaScript API 外接程序自定义函数。
若要为自定义函数设置等效的 XLL 加载项,请指定 FileName
XLL 文件的 。 当用户打开包含 XLL 文件中函数的工作簿时,Excel 会将函数转换为兼容的函数。 然后,工作簿在 Windows 上的 Excel 中打开时使用 XLL 文件,但在 Web 或 Mac 上打开时,它将继续使用 Excel JavaScript API 加载项中的自定义函数。
以下示例演示如何在 Excel JavaScript API 外接程序清单文件中将 COM 加载项和 XLL 加载项指定为等效项。 通常同时指定这两者。 为使完整性,此示例在上下文中显示了这两个等效项。 它们分别由其 ProgId
和 FileName
标识。 元素 EquivalentAddins
必须紧挨在结束 VersionOverrides
标记之前。 有关 COM 加载项兼容性的详细信息,请参阅 使 Office 外接程序与现有 COM 加载项兼容。
<VersionOverrides>
...
<EquivalentAddins>
<EquivalentAddin>
<ProgId>ContosoCOMAddin</ProgId>
<Type>COM</Type>
</EquivalentAddin>
<EquivalentAddin>
<FileName>contosofunctions.xll</FileName>
<Type>XLL</Type>
</EquivalentAddin>
</EquivalentAddins>
</VersionOverrides>
注意
如果 Excel JavaScript API 外接程序将其自定义函数声明为与 XLL 加载项兼容,则稍后更改清单可能会中断用户的工作簿,因为它会更改文件格式。
XLL 兼容函数的自定义函数行为
打开电子表格时,加载项的 XLL 函数将转换为 XLL 兼容的自定义函数,并且有一个等效的加载项可用。 下次保存时,XLL 函数以兼容模式写入文件,以便在 XLL) 不支持的平台上使用 XLL 加载项和 Excel JavaScript API 外接程序自定义函数 (。
下表比较了 XLL 用户定义函数、XLL 兼容自定义函数和 Excel JavaScript API 外接程序自定义函数的功能。
XLL 用户定义函数 | XLL 兼容的自定义函数 | Excel JavaScript API 加载项自定义函数 | |
---|---|---|---|
支持的平台 | Windows | Windows、macOS、Web 浏览器 | Windows、macOS、Web 浏览器 |
支持的文件格式 | XLSX、XLSB、XLSM、XLS | XLSX、XLSB、XLSM | XLSX、XLSB、XLSM |
公式自动完成 | 否 | 是 | 是 |
流式 | 可以通过 xlfRTD 和 XLL 回调。 | 是 | 是 |
函数本地化 | 否 | 不正确。 名称和 ID 必须与现有 XLL 的函数匹配。 | 是 |
可变函数 | 是 | 是 | 是 |
多线程重新计算支持 | 是 | 是 | 是 |
计算行为 | 无 UI。 Excel 在计算过程中可能无响应。 | 用户看到 #BUSY! 直到返回结果。 | 用户看到 #BUSY! 直到返回结果。 |
要求集 | 不适用 | CustomFunctions 1.1 及更高版本 | CustomFunctions 1.1 及更高版本 |