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 加到包含每种颜色计数的数组。
希望对您有所帮助。让我知道您是否需要其他任何东西或者您不明白什么。 :)
我正在尝试使用 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 加到包含每种颜色计数的数组。
希望对您有所帮助。让我知道您是否需要其他任何东西或者您不明白什么。 :)