这一篇,继续探讨一下自定义函数,我们将自己开发一个Add-in,并且实现自定义函数。你可以跟着这篇官方文档(https://learn.microsoft.com/en-us/office/dev/add-ins/excel/custom-functions-overview)的说明进行操作,也可以跟着我下面的截图进行练习。.

选择 Excel Custom Functions using a Shared Runtime, 回车

选择Typescript,然后回车,再次回车,等待直到看到下面的界面

按照提示运行两行命令(cd "My Office Add-in" ,然后 npm start),这个会自动打开Excel进行调试, 然后在下面的单元格分别输入如下的公式。

这些函数跟内置函数基本一样工作,当然如果你细心的话,你会发现,它们会在一开始显示 “#BUSY!” 的字样,这是因为这些代码毕竟不是内置的,他们需要通过Excel来调用Add-in中定义的Javascript函数来得到结果。

更加有意思的是,第二行和第三行其实会每隔一秒就会刷新一下。这个功能还是很强大的,如果我们要做一个定时刷新的报表,这个功能很有用。我后续将单独用一篇文章来介绍细节。
下面我们回到上面这个自动生成的项目,通过VS Code看一下它的代码,已经相关的清单文件(manifest)。
你可以在manifest.xml文件中找到如下定义
<AllFormFactors><ExtensionPoint xsi:type="CustomFunctions"><Script><SourceLocation resid="Functions.Script.Url"/></Script><Page><SourceLocation resid="Functions.Page.Url"/></Page><Metadata><SourceLocation resid="Functions.Metadata.Url"/></Metadata><Namespace resid="Functions.Namespace"/></ExtensionPoint></AllFormFactors>
以及具体的地址
<bt:Urls><bt:Url id="Functions.Script.Url" DefaultValue="https://localhost:3000/dist/functions.js"/><bt:Url id="Functions.Metadata.Url" DefaultValue="https://localhost:3000/dist/functions.json"/><bt:Url id="Functions.Page.Url" DefaultValue="https://localhost:3000/taskpane.html"/><bt:Url id="GetStarted.LearnMoreUrl" DefaultValue="https://go.microsoft.com/fwlink/?LinkId=276812"/><bt:Url id="Taskpane.Url" DefaultValue="https://localhost:3000/taskpane.html"/></bt:Urls>
这些函数的代码具体在src目录中的functions.ts文件中。

请注意,正如你所看到的这样,这个Add-in中其实既有任务面板功能(TaskPane),也有自定义函数功能(Custom Functions),所以你并不需要专门为他们单独建立项目。
如果你没有做到Add-in开发,可能一下子无法理解这些。这种情况下,你应该先从Script Lab开始,另外,我将视情况录制相关课程(但目前没有具体时间计划)。