在replaceText()中格式化

时间:2018-05-12 10:52:45

标签: google-apps-script google-docs

我已经让doc.getBody().replaceText(oldregex,newstring)在Google文档脚本中工作正常,并且希望在新闻字符串上设置一些粗体/斜体。这看起来比我想象的要难。有没有人找到一个整洁的方法来做到这一点?

我目前以为我需要......

  • 使用rangeBuilder
  • 将newtext构建为范围
  • 查找旧文本并选择它作为范围(不知何故......)
  • 清除oldtext范围并在查找位置插入新文本范围

对于像HTML一样的标签来说,这似乎很简单。我肯定错过了一些东西。非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

由于replaceText仅更改纯文本内容,保留格式,因此可以通过在替换之前应用格式来实现目标。首先,findText遍历文本并为每个匹配设置粗体;然后replaceText执行替换。

有两种情况需要考虑:只有元素中的一部分文本匹配(这是典型的)并且整个元素是匹配的。 isPartial类的属性RangeElement区分了这些属性。

function replaceWithBold(pattern, newString) {
  var body = DocumentApp.getActiveDocument().getBody();
  var found = body.findText(pattern);
  while (found) {
    var elem = found.getElement();
    if (found.isPartial()) {
      var start = found.getStartOffset();
      var end = found.getEndOffsetInclusive();
      elem.setBold(start, end, true);
    }
    else {
      elem.setBold(true);
    }
    found = body.findText(pattern, newString);
  }
  body.replaceText(pattern, newString);
}
  

对于一些微不足道的事情来说,这似乎是很多工作

使用Apps脚本处理Google文档时,这是正确且典型的。