如何在 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 登录,加载项只有在登录成功后才能工作。
所以我的问题简而言之:
使用插件命令时
如何在用户点击第一个按钮之前调用任何功能
button/menu 项左右?
如何让一些 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)。
我正在使用 office.js
创建我的第一个 Excel 插件。此时此刻,我正在尝试弄清楚如何在使用 Add-in Commands
时调用一些初始代码。
当我不使用加载项命令时,主页会在加载项加载时加载,我可以进行一些初始化,例如定义命名项、绑定等。但是在加载项命令的情况下,我无法找到任何方法来执行此操作。
每次单击按钮都会加载指定的 "functions.html",调用 Office.initialize,然后调用清单中指定的方法,然后再次卸载所有内容,这是真的吗?有没有可用的持久化?
我们还需要让用户通过 ADAL 登录,加载项只有在登录成功后才能工作。
所以我的问题简而言之:
使用插件命令时
如何在用户点击第一个按钮之前调用任何功能 button/menu 项左右?
如何让一些 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)。