Word 加载项中的绑定用法

Binding usage in Word Add-in

我想使用 Office 加载项技术为 Word 文档提供模型-视图-控制器逻辑。

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

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

当然!您描述的场景实际上是该平台最初设计的主要加载项类型之一。关键元素是一个 JavaScript 对象,我们称之为 "Binding",它跟踪文档中的内容控件,并且不需要 OXML 或自定义 XML。

API可以直接添加内容控件(类似文本框):调用Bindings.addFromSelectionAsync方法

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

register for two event handlers so that you receive notifications when the user selects or modifies the text inside those content controls. The relevant events in this case are BindingSelectionChanged and BindingDataChanged,分别

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,Office 加载项项目经理