这里有几个问题。让我们打破他们:
外接生命周期
加载项不会被初始化/加载,直到用户启动/将它们添加到文档中。在此之前,唯一出现的是清单文件中定义的命令。 请注意,取决于您的配置,事情可能会有点不同(下面的更多内容)。
无论您的加载项如何启动(功能,显示任务窗格等),生命周期都保持不变。 Office打开清单中指定的URL并连接加载项和主机应用程序之间的通信。一旦完成,它将执行您为Office.initialize
定义的功能。
虽然在这方面确实存在一些开销,但这是非常不可避免的。我们需要在API跨越边界进行操作之前,连接两个沉重的沙盒应用程序之间的通信。您的页面(或函数)需要等待它发生才能开始执行操作(即Office.initialize)。我们还需要确保加载的页面具有响应性,这就是为什么我们使用5秒的超时时间调用Office.initialize。
即使设置开销,该过程异常快速。一般来说,瓶颈是Web应用程序加载的资源远远超过必要的。这是使用单独的functions.html
的原因之一,它允许你抛出一切,但最低限度(参考office.js
和functions.js
)。
外接命令&自动加载
第一个是在使用外接命令影响如何打开文档时加载项加载。如果没有定义加载项命令,Excel将自动重新加载在保存文档时以前打开的任何加载项。
如果您定义了加载项命令,则此自动加载过程不再发生。 Excel将加载您的加载项命令,但它不会自动启动加载项本身。
这可以使用新的Office.AutoShowTaskpaneWithDocument
功能进行控制。这里有一个演练:Automatically open a task pane with a document。此功能在Office版本中尚未广泛使用,因此它仍然处于预览状态。也就是说,你当然可以使用这个功能,直到你的用户收到一个支持它的版本,它才会被忽略。
预认证
认证需要在您的外接内完全处理。很遗憾,在加载加载项之前没有办法预先验证用户身份。就Office而言,如果他们已经加载了你的清单,那么你就会将加载项命令添加到功能区。您需要在加载项中处理身份验证,并在需要用户提供凭证时使用displayDialogAsync
启动OAUTH工作流程。
感谢马克为您提供了迅速而详尽的答案,现在对我来说更加清晰! –