在 google 文档中绘制某些词 - Google Apps 脚本

Paint certain words in google docs - Google Apps Script

我有以下代码:

        var textToHighlight = 'Normal';
        var highLightStyle = {};
        highLightStyle[DocumentApp.Attribute.FOREGROUND_COLOR] = '#FFC0CB';
        var paras = doc.getParagraphs();
        var textLocation = {};

        for (i=0; i<paras.lenght; i++) {
          textLocation = paras[i].findText(textToHighlight);
          if (textLocation != null && textLocation.getStartOffset() != -1) {
            textLocation.getElement().setAttributes(textLocation.getStartOffset(), textLocation.getEndOffsetInclusive(), highLightStyle);
          }
        }

有了它,我想给文档中出现的所有单词'normal'涂上颜色,但是当我运行代码时,没有任何反应,它也没有指出任何错误,它编译通常。

我试过另一个代码:

        let pinkColor = "#FFC0CB"
        let pinkElements = body.findText("Normal")
        let elem = pinkElements.getElement().asText();
        let t = elem.getText();
        elem.setForegroundColor(t.indexOf('Normal'), t.indexOf('High')+3, pinkColor)

但是上面的代码只绘制它找到的第一个词 'Normal',其余的保持中性。

有谁知道这两个代码可能发生了什么?

我很惊讶它返回了第一个。 “长度”在此行拼写错误:

for (i=0; i<paras.**lenght**; i++) {

看看将其更改为“.length”是否可以解决问题。如果没有,您可以使用 Class Range 的文档中的类似示例。

Does anyone know what may be happening to both codes?

代码 1:

你打错了,lenght应该是length

代码 2:

请参阅下面我的回答。

解释:

您需要使用特定关键字遍历所有元素。

为此,您需要执行以下步骤:

  1. 获取第一个找到的元素:

    pinkElement = body.findText(searchWord);

  2. 检查是否存在具有 searchWord 的元素

  3. 为这个元素做一些代码

  4. 分配一个新元素,即您之前找到的下一个元素:

    pinkElement = body.findText(searchWord, pinkElement);

  5. 重复步骤 1-4 直到没有其他元素:

    while (pinkElement != null)

解决方案:

function myFunction() {
   let doc = DocumentApp.getActiveDocument();
   let body = doc.getBody();
   let pinkColor = "#FFC0CB";
   let searchWord = "Normal";
   let pinkElement = body.findText(searchWord);
   while (pinkElement != null) {
     let elem = pinkElement.getElement().asText();
     let t = elem.getText();
     elem.setForegroundColor(t.indexOf(searchWord), t.indexOf('High')+3, pinkColor);
     pinkElement = body.findText(searchWord, pinkElement);
   }
}