我正在使用office.js
创建我的第一个Excel加载项。此时我正试图弄清楚在使用Add-in Commands
时如何调用一些初始代码。
当我没有加载项命令时,加载加载项时加载主页,我可以进行一些初始化,如定义命名项,绑定等。但是在加载项命令的情况下,我无法找到任何方法来执行此操作。
是否每次单击按钮都会加载指定的“functions.html”,调用Office.initialize,然后调用清单中指定的方法,然后再次卸载所有内容?有持久性吗?
我们还需要让用户通过ADAL登录,只有登录成功后才能使用加载项。
所以我的问题简而言之:
使用加载项命令时
如何在用户点击第一个功能之前调用任何功能 按钮/菜单项左右?
如何在加载项中保留一些js变量 会话
答案 0 :(得分:1)
你在这里有几个问题。让我们分解它们:
加载项生命周期
在用户启动/添加加载项到文档之前,不会初始化/加载加载项。在此之前,表面上显示的唯一项目是清单文件中定义的命令。 请注意,根据您的配置,操作可能会有所不同(详见下文)。
无论您的加载项如何启动(功能,显示任务窗格等),生命周期都保持不变。 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工作流。
答案 1 :(得分:1)
以下是您的2个问题的官方documentation。
为此,你可以: