Word外接程序中的绑定用法

本文关键字:绑定 用法 程序 Word | 更新日期: 2023-09-27 18:03:41

我想使用Office外接程序技术赋予Word文档模型-视图-控制器逻辑。

在我的场景中,用户应该能够创建一个新的Word文档,激活外接程序,并按下外接程序中的按钮,将文本框字段添加到文档中。该字段应该显示一个来自数据库的数字:当用户更新该数字并按下save时,该数字应该被写回数据库。下次打开Word文档时,应该刷新该数字,以便显示更新后的值。

我想知道的是Add-in技术是否可以使用(可能有绑定支持?)或者它仍处于实验阶段。我在试图理解构建简单地表示文本框的紧凑OOXML的最佳方法时遇到了麻烦:方法getSelectedDataAsync输出一个非常复杂的文档,它不可能是描述单个-light-basic-poor-naked-textbox字段的更聪明的方法!如何将绑定设置为自定义XML?XML应该放在哪里?在文档中?我看了微软在GitHub上提供的示例,但它们不是那么清楚,因为在许多情况下,它们是基于现有的Word文档,已经有必要的数据和字段。

Word外接程序中的绑定用法

当然!您描述的场景实际上是该平台最初设计时所针对的一种关键外接程序类型。关键元素是一个JavaScript对象,我们称之为"Binding",它跟踪文档中的内容控件,不需要XML或自定义XML。

API能够直接添加内容控件(类似于文本框):调用Bindings。addFromSelectionAsync方法。

function addNewField(fieldName){
    Office.context.document.bindings.addFromSelectionAsync("text",
    { id: fieldName },
    function (asyncResult){
        displayNumberFromDatabase(asyncResult.value);
    }
}

还要注册两个事件处理程序,以便在用户选择或修改这些内容控件中的文本时接收通知。本例中的相关事件分别是BindingSelectionChanged和bindingdatachchanged。

Office.context.document.addHandlerAsync("bindingDataChanged", whenBindingDataChanged);
Office.context.document.addHandlerAsync("bindingSelectionChanged", whenBindingSelected);

当这些事件被触发时,您将需要读取内容。您可以使用Binding实现这一点。getDataAsync方法。

function whenBindingDataChanged(eventArgs){
    eventArgs.binding.getDataAsync(function(asyncResult){
        setValueToDatabaseAsync(eventArgs.binding.id,asyncResult.value);
        // you need to implement setValueToDatabaseAsync
    });
}

最后,要自己修改Binding的内容来写入初始值,请使用Binding。setDataAsync方法。

function displayNumberFromDatabase(myBinding){
    getValueFromDatabaseAsync(myBinding.id, function(value){
        myBinding.setDataAsync(value);
    });
    // you need to implement getValueFromDatabaseAsync
}

-Michael Saunders, PM for Office插件