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

How to call code at add-in load in Excel by js

我正在使用 office.js 创建我的第一个 Excel 插件。此时此刻,我正在尝试弄清楚如何在使用 Add-in Commands 时调用一些初始代码。

当我不使用加载项命令时,主页会在加载项加载时加载,我可以进行一些初始化,例如定义命名项、绑定等。但是在加载项命令的情况下,我无法找到任何方法来执行此操作。

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

我们还需要让用户通过 ADAL 登录,加载项只有在登录成功后才能工作。

所以我的问题简而言之:

使用插件命令时

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

  2. 如何让一些 js 变量在加载项上持久化 会话?

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

加载项生命周期

在用户 launches/adds 将加载项添加到文档之前,加载项不会 initialized/loaded。在此之前,唯一出现的项目是清单文件中定义的命令。 请注意,根据您的配置,操作可能会有所不同(更多内容见下文)。

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

虽然这肯定会有一些开销,但这是不可避免的。在 API 可以跨越边界运行之前,我们需要在两个严重沙盒化的应用程序之间建立通信。您的页面(或功能)需要等待这种情况发生,然后才能开始采取行动(即 Office.initialize)。我们还需要确保加载的页面是响应式的,这就是我们调用 Office.initialize 并设置 5 秒超时的原因。

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

插件命令和自动加载

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

如果您定义了插件命令,则不会再发生此自动加载过程。 Excel 将加载您的插件命令,但不会自动启动插件本身。

这可以使用新的 Office.AutoShowTaskpaneWithDocument 功能进行控制。这里有一个演练:Automatically open a task pane with a document。此功能尚未在 Office 版本中广泛使用,因此它实际上仍处于预览阶段。也就是说,您当然可以使用该功能,它会被忽略,直到您的用户收到支持它的版本。

预认证

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

这是你的第 2 个问题的官方documentation

为此,您可以:

  • 使用 JavaScript API for Office 的成员将数据作为 name/value 对存储在 属性 包中,存储位置取决于加载项类型.
  • 使用底层浏览器控件提供的技术:浏览器 cookie 或 HTML5 网络存储(localStorage 或 sessionStorage)。