如何通过 js 在 Excel 中的加载项加载时调用代码



我正在使用office.js创建我的第一个 Excel 加载项。目前,我正在尝试弄清楚在使用Add-in Commands时如何调用一些初始代码。

当我不执行加载项命令时,将在加载加载项时加载主页,并且可以执行一些初始化,例如定义命名项、绑定等。但是在加载项命令的情况下,我找不到任何方法可以做到这一点。

每次单击按钮都会加载指定的"函数.html",调用 Office.initialize,然后调用清单中指定的方法,然后再次卸载所有内容,这是真的吗?是否有任何可用的持久性?

我们还需要让用户通过 ADAL 登录,并且外接程序只有在登录成功时才应有效。

所以我的问题简而言之:

使用外接程序命令时

  1. 如何在用户单击第一个之前调用任何功能 按钮/菜单项左右?

  2. 如何在加载项上保留一些 js 变量 会期?

你这里有几个问题。让我们分解一下:

外接程序生命周期

在用户启动加载项/将其添加到文档中之前,不会初始化/加载加载项。在此之前,唯一显示的项目是清单文件中定义的命令。请注意,根据您的配置,操作可能会有所不同(更多内容见下文(。

无论外接程序如何启动(函数、显示任务窗格等(,生命周期都保持不变。Office 将打开清单中指定的 URL,并连接外接程序和主机应用程序之间的通信。完成此操作后,它将执行您为Office.initialize定义的函数。

虽然这肯定有一些开销,但这是不可避免的。我们需要连接两个高度沙盒化的应用程序之间的通信,然后 API 才能跨边界运行。您的页面(或函数(需要等待这种情况发生,然后才能开始执行操作(即 Office.initialize(。我们还需要确保加载的页面是响应式的,这就是为什么我们调用Office.initialize,超时时间为5秒。

即使有设置开销,该过程也非常快。通常,瓶颈是 Web 应用加载的资源比必要的要远。这是使用的原因之一 单独functions.html,它允许您抛弃除最低限度之外的所有内容(对office.js和您的functions.js的引用(。

加载项命令和自动加载

首先是使用加载项命令会影响打开文档时加载项的加载方式。如果未定义加载项命令,Excel 将自动重新加载以前在保存该文档时打开的任何加载项。

如果定义了加载项命令,则不再发生此自动加载过程。Excel 将加载外接程序命令,但不会自动启动外接程序本身。

这可以使用新的Office.AutoShowTaskpaneWithDocument功能进行控制。此处提供了一个演练:自动打开包含文档的任务窗格。此功能尚未在 Office 版本中广泛使用,因此它实际上仍处于预览状态。也就是说,您当然可以使用该功能,在您的用户收到支持它的版本之前,它只会被忽略。

预身份验证

身份验证需要完全在外接程序中处理。遗憾的是,无法在加载外接程序之前对用户进行预身份验证。就 Office 而言,如果他们已加载您的清单,那么您的加载项命令将添加到功能区。您需要在外接程序中处理身份验证,并在需要用户提供凭据时使用displayDialogAsync启动 OAUTH 工作流。

这是您的 2 个问题的官方文档。

为此,您可以:

  • 使用适用于 Office 的 JavaScript API 的成员,这些成员将数据作为名称/值对存储在依赖于外接程序类型的位置的属性包中。
  • 使用底层浏览器控件提供的技术:浏览器 Cookie 或 HTML5 Web 存储(localStorage 或 sessionStorage(。

最新更新