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

时间:2017-08-09 14:51:02

标签: office-js

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

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

是否每次单击按钮都会加载指定的“functions.html”,调用Office.initialize,然后调用清单中指定的方法,然后再次卸载所有内容?有持久性吗?

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

所以我的问题简而言之:

使用加载项命令时

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

  2. 如何在加载项中保留一些js变量 会话

2 个答案:

答案 0 :(得分:1)

你在这里有几个问题。让我们分解它们:

加载项生命周期

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

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

虽然这肯定有一些开销,但这是不可避免的。在API跨越边界之前,我们需要在两个重度沙盒应用程序之间连接通信。您的页面(或函数)需要等待它才能开始执行操作(即Office.initialize)。我们还需要确保加载的页面是响应式的,这就是我们在5秒超时时调用Office.initialize的原因。

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

加载项命令&自动装载

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

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

可以使用新的Office.AutoShowTaskpaneWithDocument功能控制此功能。这里有一个演练:Automatically open a task pane with a document。此功能在Office版本中尚未广泛使用,因此它仍然有效地保留在预览版中。也就是说,您当然可以使用该功能,只有在您的用户收到支持它的版本之前,它才会被忽略。

<强>预认证

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

答案 1 :(得分:1)

以下是您的2个问题的官方documentation

为此,你可以:

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