自定义函数疑难解答

开发自定义函数时,创建和测试函数可能会遇到产品错误。

重要

请注意,以下平台上可以使用 Excel 自定义函数。

  • Office 网页版
  • Windows 版 Office
    • Microsoft 365 订阅
    • 零售永久 Office 2016 及更高版本
    • 批量许可永久Office 2021及更高版本
  • Mac 版 Office

以下各项当前不支持 Excel 自定义函数:

  • iPad 版 Office
  • Windows 上 Office 2019 或更早版本的批量许可永久版本

若要解决这些问题,可以启用运行时日志记录以捕获错误,并参考Excel 的本机错误消息。 另外,检查常见错误,例如没有解析 promise

调试自定义函数

若要调试使用 共享运行时的自定义函数加载项,请参阅 调试 Office 外接程序概述

若要调试不使用共享运行时的自定义函数加载项,请参阅 自定义函数调试

启用运行时日志记录

如果在 Windows 上的 Office 中测试加载项,应启用运行时日志记录。 运行时日志记录将 console.log 语句传递给创建的单独日志文件,以帮助发现问题。 这些语句涵盖各种错误,包括与加载项清单文件、运行时条件或自定义函数安装相关的错误。 有关运行时日志记录的详细信息,请参阅使用运行时日志记录功能调试加载项

检查 Excel 错误消息

Excel 有许多内置错误消息,如果存在计算错误,系统会将向单元格返回这些错误消息。 自定义函数仅使用以下错误消息:#NULL!#DIV/0!#VALUE!#REF!#NAME?#NUM!#N/A#BUSY!

通常情况下,这些错误可能对应于你在 Excel 中熟悉的错误。 有一些特定于自定义函数的异常,如下所示:

  • #NAME 错误通常意味着注册函数时出错。
  • #N/A 错误也可能是注册的函数无法运行的迹象。 这通常是因为缺少 CustomFunctions.associate 命令。
  • #VALUE 错误通常是指函数的脚本文件中出现了错误。
  • #REF! 错误可能指示函数名称与已存在的加载项中的函数名称相同。

清除 Office 缓存

与自定义函数相关的信息由 Office 缓存。 有时候,开发和反复重新加载带有自定义函数的加载项时,变更可能不会显示。 可以通过清除 Office 缓存修复此问题。 有关详细信息,请参阅清除 Office 缓存

常见问题和解决方案

无法从 localhost 打开加载项:使用本地环回豁免

如果看到错误“我们无法从 localhost 打开此加载项”,则需要启用本地环回豁免。 有关如何执行此操作的详细信息,请参阅此 Microsoft 支持文章

Windows 版 Excel 上的运行时日志记录报告“TypeError:网络请求失败”

如果在调用 localhost 服务器时在运行时日志中看到错误“TypeError:网络请求失败”,必须启用本地环回异常。 若要详细了解如何执行此操作,请参阅这篇 Microsoft 支持文章中的选项 #2

确保返回 promise

在 Excel 等待自定义函数完成时,它会在单元格中 显示 #BUSY!。 如果自定义函数代码返回一个 promise,但该 promise 不返回结果,则 Excel 将继续显示 #BUSY!。 查看函数以确保所有 promise 都正确地向单元格返回结果。

错误:开发服务器已在端口 3000 上运行

有时候,运行 npm start 时,你可能会看到开发服务器已在端口 3000(或加载项使用的任何端口)上运行的错误。 可以通过运行 npm stop 或关闭 Node.js 窗口停止开发服务器运行。 在某些情况下,开发服务器可能需要几分钟才能停止运行。

我的函数无法加载:关联函数

如果尚未注册 JSON 并且已编写了自己的 JSON 元数据,则可能会看到 #VALUE! 错误,或收到无法加载加载项的通知。 这通常意味着需要将每个自定义函数与为其在 JSON 元数据文件中指定的 id 属性相关联。 这是通过使用 函数完成的 CustomFunctions.associate() 。 通常,此函数调用在每个函数之后或在脚本文件的末尾进行。 如果没有关联自定义函数,它将不起作用。

下面的示例显示了一个 add 函数,后跟一个与相应的 JSON ID ADD 相关联的函数名称 add

/**
 * Add two numbers.
 * @customfunction
 * @param {number} first First number.
 * @param {number} second Second number.
 * @returns {number} The sum of the two numbers.
 */
function add(first, second) {
  return first + second;
}

CustomFunctions.associate("ADD", add);

有关此过程的详细信息,请参阅 将函数名称与 JSON 元数据相关联

已知问题

Excel 自定义函数 GitHub 存储库中跟踪和报告已知问题。

报告反馈

如果遇到本文中未记录的问题,请告诉我们。 有两种方法可以报告问题。

在 Windows 或 Mac 上的 Excel 中

如果在 Windows 或 Mac 上使用 Excel,则可以直接从 Excel 向 Office 扩展性团队报告反馈。 若要执行此操作,请选择“文件”>“反馈”>“发送哭脸”。 发送哭脸将提供必要的日志,以帮助我们了解你遇到的问题。

在 Github 中

可以随时通过任何文档页底部的“内容反馈”功能提交所遇到的问题,也可以直接向自定义功能存储库提交新问题

后续步骤

了解如何让自定义函数与 XLL 用户定义的函数兼容

另请参阅