我想在我的 Word 插件中添加一個查找功能。單擊按鈕,Word 將滾動到需要搜索的單詞的第一個位置,再次單擊,Word 將滾動到下一個位置。我想出瞭如何找到第一個,但我無法循環遍歷單詞搜索結果的 RangeCollection。我正在尋找一些類似於 getNext() 的函數
下面是找到第一個“和”的代碼。有用:
async function scroll() {
await Word.run(async (context) => {
context.document.body.search("and", { matchWholeWord: true, matchCase: false }).getFirst().select();
await context.sync()
}
)}
但是,如果我想找到第二個或更多,我不能這樣做:
async function scroll() {
await Word.run(async (context) => {
context.document.body.search("and", { matchWholeWord: true, matchCase: false }).getFirst().getNext().select();
await context.sync()
} )}
我閱讀了文檔,並且 RangeCollection 沒有 getNext()。希望有人知道如何解決它。謝謝!
有一些解決方法。
加載RangeCollection.items
並記錄索引。例子:
var index = 0;
async function selectNext(...) {
...
var ranges = context.document.body.search(...);
ranges.load('items');
await context.sync();
if (index >= ranges.items.length) {
index = 0;
}
ranges.items[index++].select();
await context.sync();
...
}
此解決方案尊重索引,但不尊重當前選擇位置。因此,如果您更喜歡向下搜索而不是搜索下一個,這裡是解決方案 2。
加載RangeCollection.items
並調用Range.compareLocationWith
. 例子:
var ranges = context.document.body.search(...);
ranges.load('items');
await context.sync();
var selection = context.document.getSelection();
var compareResults = ranges.items.map(range => range.compareLocationWith(selection));
await context.sync();
for(var index in compareResults) {
if (compareResults[index].value == 'After') {
ranges.items[index].select();
await context.sync();
break;
}
}
當然,您需要額外的代碼並對其進行潤色以使其成為真正的產品,但這些只是粗略的想法。請看看他們是否適合你。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句