在 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:
请参阅下面我的回答。
解释:
您需要使用特定关键字遍历所有元素。
为此,您需要执行以下步骤:
获取第一个找到的元素:
pinkElement = body.findText(searchWord);
检查是否存在具有 searchWord
的元素
为这个元素做一些代码
分配一个新元素,即您之前找到的下一个元素:
pinkElement = body.findText(searchWord, pinkElement);
重复步骤 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);
}
}
我有以下代码:
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:
请参阅下面我的回答。
解释:
您需要使用特定关键字遍历所有元素。
为此,您需要执行以下步骤:
获取第一个找到的元素:
pinkElement = body.findText(searchWord);
检查是否存在具有
searchWord
的元素为这个元素做一些代码
分配一个新元素,即您之前找到的下一个元素:
pinkElement = body.findText(searchWord, pinkElement);
重复步骤 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);
}
}