【问题标题】:How to call code at add-in load in Excel by js如何通过js在Excel中加载加载项时调用代码
【发布时间】:2017-08-09 23:56:40
【问题描述】:

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

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

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

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

所以我的问题简而言之:

使用插件命令时

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

  2. 如何让一些 js 变量在加载项上保持持久性 会议?

【问题讨论】:

    标签: office-js


    【解决方案1】:

    您有几个问题。让我们分解它们:

    插件生命周期

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

    无论您的加载项如何启动(功能、显示任务窗格等),生命周期都保持不变。 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 工作流程。

    【讨论】:

    • 感谢 Mark 的快速而详细的回答,现在对我来说更清楚了!
    【解决方案2】:

    这是您的 2 个问题的官方 documentation

    为此,您可以:

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

    【讨论】:

    • 谢谢亚历克斯,你帮了我很多,因为直到知道我还没有意识到与文件一起存储的财产包的存在。这很棒!到目前为止,我使用了一种非常复杂的方法来使用命名项来存储“工作表变量”。这使事情变得容易得多。不幸的是,尽管您回答了我问题的第二部分,但我无法将 2 个帖子标记为答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    相关资源
    最近更新 更多