javascript - OfficeJS 添加和更新绑定(bind)事件处理程序

标签 javascript office-js exceljs

我正在尝试创建一个绑定(bind),以便我最终可以检查该单元格是否已更改并进行一些 AJAX 调用。 documentation举几个例子,我试图把它们变成最简单的例子:

  Office.initialize = function(){
  $(document).ready(function() {
    Excel.run(function(context){
        // This should create a new binding and store it in the bindingsObject
        // add(range: Range or string, bindingType: string, id: string)
        context.workbook.bindings.add("Sheet1!A1:A2", "Range", "A_binding");

        // create a new event handler for this bindings
        Office.select("bindings#A_binding").addHandlerAsync(Office.EventType.BindingDataChanged, onBindingDataChanged);


        $("#output").append("<br /><br /> Finished Pre-Sync");
        return context.sync().then(function(){
            $("#output").append("<br /><br />Post Sync")
        });
    }).catch(function(error){
        $("#debugger").append("error: " + JSON.stringify(error.debugInfo));
    })
  });
  }

  function onBindingDataChanged(eventArgs){
      Excel.run(function(context) {
          $("output").append("updated");
      })
  }

但是,当我更改单元格中的数据时,什么也没有发生,没有错误,也没有“更新”。这是创建绑定(bind)的错误方法吗?

最佳答案

以下代码为 Sheet1!A1:A2 范围创建一个绑定(bind),然后为该绑定(bind)添加一个 onDataChanged 事件处理程序。

function registerDataChangedHandler_JS() {
    Excel.run(function (context) {
        var myBinding = context.workbook.bindings.add("Sheet1!A1:A2", "range", "A_binding");

        myBinding.onDataChanged.add(onBindingDataChanged_JS);

        return context.sync()
            .then(function () {
                console.log("Created binding and added onDataChanged event for the binding.");
            });
    }).catch(errorHandlerFunction);
}

function onBindingDataChanged_JS(eventArgs) {
    Excel.run(function (context) {
        console.log("Cells were updated!");

        return context.sync();
    });
}

注意:您可以使用脚本实验室 (https://aka.ms/getscriptlab) 自己快速轻松地尝试此代码段。只需安装 Script Lab 插件(免费),然后在导航菜单中选择“导入”,并使用以下 Gist URL:https://gist.github.com/kbrandl/a39042da654da0f2b1e1358631d9ca6a .此 Gist 包含 JavaScript(方法名称以 _JS 结尾)和 TypeScript(方法名称以 _TS 结尾)的代码示例。

加载加载项时创建绑定(bind)并添加事件处理程序:

Office.initialize = function (reason) {
    $(document).ready(function () {
        registerDataChangedHandler_JS();
    });
};

(您可以在此处了解有关初始化事件的更多信息:https://learn.microsoft.com/en-us/office/dev/add-ins/develop/understanding-the-javascript-api-for-office#initializing-your-add-in。)

最后,您帖子中的文档链接链接到 GitHub 上的文档源文件。为了获得更好的用户体验,我建议您使用文档站点本身:https://learn.microsoft.com/en-us/office/dev/add-ins .要从此文档站点获取 API 引用文档,请使用引用部分中的链接:

enter image description here

(这里是Binding API 引用文章的直接链接:https://dev.office.com/reference/add-ins/shared/binding。)

关于javascript - OfficeJS 添加和更新绑定(bind)事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48098659/

相关文章:

office-js - 如何在桌面 word 中对 JavaScript 插件中的选定段落进行操作?

Javascript 数组内容在离开函数上下文后消失

reactjs - 从 "exceljs"导入 Excel 在浏览器上抛出错误 TypeError : Cannot read property 'prototype' of undefined

node.js - 如何使用 exceljs 从 Promise 中返回文档

javascript var 分配动态可为空值显示脚本错误

javascript - 制作圆形模态

javascript - 将工具提示的值发送到 javascript 函数

javascript - XHR.send(文件+参数)?

c# - 我可以使用 Base64String 中的 body.insertFileFromBase64 来自 doc 文件而不是 docx

javascript - 尝试调整插入图像的大小时出现错误