Docs Apps 脚本中按前景色计算的字数

Word Count by Foreground Colors in Docs Apps Script

我正在尝试使用 Google Apps Script 编写脚本,每种颜色的字数为 return。

我写了 return 总字数的代码和 return 每段前景色的代码。据我了解,段落具有前景色 属性 但文本没有。我很难将我的两个函数组合到 return 每个给定颜色的字数。以下是我所拥有的。任何建议或方向都会有所帮助。

  function myFunction() {

  var doc = DocumentApp.openByUrl("https://docs.google.com/document/d/1wi0EEWZECyn2Q7B0XWY3D6WKJ2TNZ_XzN47LTT8yWng/edit");
  var docBody = doc.getBody();
  var text = docBody.getText();
  var paragraph = docBody.getParagraphs();

// Return word count of text.

  if (text.length === 0) 
        return 0;

  text = text.replace(/\r\n|\r|\n/g, " ");
  var replacePunctuation = text.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()"?“”]/g," ");
  var finalString = replacePunctuation.replace(/\s{2,}/g," ");
  var count = finalString.trim().split(/\s+/).length; 
  Logger.log(count);
  
//Identify all paragraph colors 

  var i;
  var color;
  for (i = 0; i < paragraph.length; i++) { 
    color = paragraph[i].getForegroundColor();
    Logger.log("paragraph " + i + ": " + color);
  }

//Identify individual colors of characters is a given paragraph
  
  var i;
  var color;
  for (i = 0; i < paragraph[0].getText().length; i++) { 
    var color = paragraph[0].editAsText().getForegroundColor(i);
    Logger.log("character" + i + ": " + color);
  }

  }

问题

您的案例场景的主要问题是 DocumentApp 只有两种获取前景色的方法:getForegroundColor() and getForegroundColor(offset)。如果元素中的所有文本(在您的情况下是段落)具有相同的背景颜色,则第一个只有 return 十六进制颜色值,否则它将 return null。第二个将 return 文本中每个字符的前景色。因此,没有方法可以 return 设置单词的颜色。

解决方法

要计算每种前景色中的单词数量,您可以先将所有文本拆分为单独的单词,然后将它们存储到一个数组中,其中包含它们在文本中的起始索引,假设一个单词只有一种颜色。

然后,在单词数组上迭代一个 for 循环,获取每个单词第一个字符的前景颜色,并将 1 加到包含每种颜色计数的数组。

希望对您有所帮助。让我知道您是否需要其他任何东西或者您不明白什么。 :)