如何使用 findText() 更改 google 文档中多次出现的格式?

How do you change formatting within a google doc for multiple occurrences using findText()?

我正在尝试在 google 文档中查找文本并替换为下标符号 - 将 "a3" 替换为 a3,但现在将 3 格式化为下标。

基于答案here 我写了一些有效的代码,但 仅替换了任何出现的第一个实例 (有些重复)。

我写了以下内容:

  for (var k=0; k<subscriptsReplace.length; k++) {
      subscript = ' a'+subscriptsReplace[k];
      find = ' a'+subscriptsReplace[k]+' ';
             Logger.log(find)
  var element = body.findText(find);
  if(element){ // if found a match
    var start = element.getStartOffset();
    var text = element.getElement().asText();
    text.replaceText(find, subscript);
    text.setTextAlignment(start+2, start+2, DocumentApp.TextAlignment.SUBSCRIPT);
    Logger.log("found one");
} // else do nothing
}

请注意,subscriptsReplace 是一个数组,其中包含整个文档中下标的所有数字。

我无法弄清楚为什么它没有得到重复,通过查看日志,我知道它不是 运行 重复的条件 - 所以它不会重新替换它已经替换的相同下标.

有人能看到发生了什么事吗? 谢谢!

你可以用这个替换整个正文中的所有内容:

function testReplace() {
  var docBody = DocumentApp.getActiveDocument().getBody();
  docBody.replaceText(searchPattern, replacement);
};

Google Documentation - Replace Text

最终的问题是使用 replaceText() 替换了整个文档中出现的所有文本,因此,在第一次迭代后无法查找和替换格式。

这是替换所有出现的代码:

  for (var k=0; k<subscriptsReplace.length; k++) {
       find = 'a'+subscriptsReplace[k]+'_';
       var element = body.findText(find);
  if(element){ // if found a match
       var start = element.getStartOffset();
       var text = element.getElement().asText();
       text.setTextAlignment(start+1, start+1, DocumentApp.TextAlignment.SUBSCRIPT);
       text.deleteText(start+2, start+2);
  } // else do nothing
}

你会看到,我没有替换,而是添加了一个特殊字符“_”作为查找标记,然后在重新格式化为下标时使用 deleteText() 一次删除它们 1 个