検索を実行し、結果に関する情報をリストとしてユーザーに表示する単語用のタスクペイン アドインを作成しました。ユーザーがリスト内の項目をクリックすると、単語の範囲を選択して、ユーザーに項目の場所を表示したいと考えています。アドインにより、ユーザーは範囲に対して追加のタスクを実行できます。たとえば、フォントの色を変更できます。
以下の関数を使用して、検索を実行し、表示する範囲を取得できます。
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;
});
};
ただし、ユーザーのクリック時に範囲を選択するのが困難です。範囲コンテキストを使用してみました:
function selectRange(range){
range.select();
return range.context.sync();
}
または、新しい Word.run コンテキストで範囲を使用します。
function selectRange(range){
return Word.run(function(context) {
context.load(range);
return context.sync().then(function(){
range.select();
return context.sync();
});
});
}
検索結果ごとにコンテンツ コントロールを作成し、関数内のすべてのコンテンツ コントロールを新しいコンテキストで再読み込みして、一致するコントロールを見つけるという潜在的な方法に出くわしましたselectRange
が、範囲が既にある場合は非常に非効率的です。
異なる Word.run コンテキストで範囲を再利用するための最良の方法は何ですか?