如何循環遍歷 Word JS API 中的 RangeCollection?

liz li

我想在我的 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()。希望有人知道如何解決它。謝謝!

chiz-ms

有一些解決方法。

方案一

加載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。

解決方案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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何從嵌套數組中刪除數組,循環遍歷數組的其餘部分。然後循環遍歷嵌套數組的 1 個值,全部在 vanilla js 中

如何循環遍歷 csv 文件中的特定 ID?

如何在 Java 中的一個循環中遍歷 2 個不同的數組

如何手动创建 Word.RangeCollection 并向其添加范围?

如何在嵌套的 for 循環中遍歷列表和字典

循環遍歷列表中的嵌套字典

循環遍歷 Python 中的列表列表

#each 循環中的 #reduce 循環不會遍歷整個數組

循環遍歷數據范圍以從 API 下載數據

JS循環遍歷數組並用地圖分組

循環遍歷 Excel Power Query 中的 Json 列表以檢索記錄

循環遍歷列表作為 R 中 filter() 函數的輸入

循環遍歷python中的數據框以選擇特定行

循環遍歷 json 文件中的每一行並過濾結果

Javascript 對象 - 檢查並循環遍歷對像中的數組

for 循環是否遍歷 Lua 和 Love2d 中的空表?

使用 break 並在 for 循環中繼續遍歷字典

循環遍歷列表以獲取python中給定範圍的最大總和

如何在 Kotlin 的循環中逐步遍歷固定範圍,其中每次迭代的步長值都會發生變化

如何循環遍歷 txt 文件以查找各種字符串並在批處理腳本中進行計數

如何遍歷 API 調用數據並在視圖中顯示

如何使用 Office.js api 在 Word 中获取当前活动表(当前光标所在的位置)?

循環遍歷數組並在 Javascript/Nodejs 中輸出模板字符串/文字

lambda 表達式 v. for 循環遍歷 Pandas 數據幀中的特定列

Python Pandas - 在刪除異常值的同時更快地遍歷數據中的類別(無 For 循環)

循環遍歷目錄並對 unix 中具有特定權限的文件執行操作

如何在 R 環境中循環編號數據幀。我必須遍歷 R 中的 22 個(可能是 22*6)個數據幀

循環遍歷嵌套數組並從第一個循環數組中返回包含字符串的項

使用Office JS Word API在Word中插入内容控件