我想使用Office加载项技术为Word文档提供“模型-视图-控制器”逻辑。
在我的情况下,用户应该能够创建新的Word文档,激活加载项并按加载项内的按钮以将文本框字段添加到文档中。该字段应显示一个来自数据库的数字:当用户更新该数字并按保存时,该数字应写回到数据库中。下次打开Word文档时,应刷新编号,以显示更新的值。
我想知道的是,该附加技术是否可以使用(可能具有绑定支持?)还是仍处于试验阶段。我在尝试理解构建仅表示我的文本框的紧凑型OOXML的最佳方法时遇到了麻烦:getSelectedDataAsync方法输出一个非常复杂的文档,这不是描述单光基础差的聪明方法。裸文本框字段!以及如何将绑定设置为自定义XML?该XML应该放在哪里?在文件里面?我查看了Microsoft在GitHub上提供的示例,但它们并不清楚,因为在许多情况下,它们基于现有的Word文档,而这些文档已经具有必要的数据和字段。
绝对!您描述的场景实际上是该平台最初设计的外接程序的关键类型之一。关键元素是一个JavaScript对象,我们称其为“绑定”,用于跟踪文档中的内容控件,并且不需要OXML或自定义XML。
该API能够直接添加内容控件(类似于文本框):调用Bindings.addFromSelectionAsync方法。
function addNewField(fieldName){
Office.context.document.bindings.addFromSelectionAsync("text",
{ id: fieldName },
function (asyncResult){
displayNumberFromDatabase(asyncResult.value);
}
}
同时注册两个事件处理程序,以便在用户选择或修改这些内容控件中的文本时收到通知。在这种情况下,相关事件分别是BindingSelectionChanged和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加载项经理
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句