我为单词创建了一个任务窗格插件,该插件运行搜索并以列表形式向用户显示有关结果的信息。当用户单击列表中的某个项目时,我想选择字词范围以向用户显示该项目的位置。然后,该插件将允许用户在范围上执行其他任务,例如更改字体颜色。
我可以使用以下功能运行搜索并获取显示范围:
function runSearch(textToFind) {
var items = [];
return Word.run(function(context) {
var options = Word.SearchOptions.newObject(context);
options.matchWildCards = false;
var rangesFind = context.document.body.search(textToFind, options);
context.load(rangesFind, 'text, font, style');
return context.sync().then(function() {
for (var i = 0; i < rangesFind.items.length; i++) {
items.push(rangesFind.items[i]);
context.trackedObjects.add(rangesFind.items[i]);
}
return context.sync();
});
})
.then(function() {
return items;
});
};
Run Code Online (Sandbox Code Playgroud)
但是,我在选择用户点击范围时遇到困难。我试过使用range上下文:
function selectRange(range){
range.select();
return range.context.sync();
}
Run Code Online (Sandbox Code Playgroud)
或在新的Word.run上下文中使用范围:
function selectRange(range){
return Word.run(function(context) {
context.load(range);
return context.sync().then(function(){
range.select();
return context.sync();
});
});
}
Run Code Online (Sandbox Code Playgroud)
我遇到了一种潜在的方法,该方法涉及为每个搜索结果创建一个内容控件,然后selectRange
在新的上下文中重新加载该函数中的所有内容控件,并找到匹配的控件,但是当我已经有了范围时,这似乎效率很低。
在不同的Word.run上下文中重用范围的最佳方法是什么?