2017-08-09 167 views
1

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

当我没有加载项命令时,加载加载项时加载主页,我可以做一些初始化,如定义命名项,绑定等。但是在附加命令的情况下,我无法找到任何方式来做到这一点。

确实是每个按钮单击加载指定的“functions.html”,调用Office.initialize,然后调用清单中指定的方法,然后再次卸载所有的东西?有没有可用的持久性?

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

所以我的问题在短期:

当使用外接命令

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

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

回答

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工作流程。

+0

感谢马克为您提供了迅速而详尽的答案,现在对我来说更加清晰! –

1

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

要做到这一点,您可以:

  • JavaScript API的使用成员办公室的数据作为名称/值对存储在存储依赖于外接式的位置的属性包。
  • 使用底层浏览器控件提供的技术:浏览器Cookie或HTML5网络存储(localStorage或sessionStorage)。
+0

谢谢亚历克斯,你帮了我很多,因为直到知道我还没有意识到存储在文档中的物业包的存在。这很棒!到现在为止,我已经使用了非常复杂的方法来使用命名项来存储“图纸变量”。这使事情变得更容易。不幸的是,我不能将2个帖子标记为答案,尽管你回答了我的问题的第二部分。 –