如何使用 findText() 更改 google 文档中多次出现的格式?
How do you change formatting within a google doc for multiple occurrences using findText()?
我正在尝试在 google 文档中查找文本并替换为下标符号 - 将 "a3" 替换为 a3,但现在将 3 格式化为下标。
基于答案here
我写了一些有效的代码,但 仅替换了任何出现的第一个实例 (有些重复)。
我写了以下内容:
for (var k=0; k<subscriptsReplace.length; k++) {
subscript = ' a'+subscriptsReplace[k];
find = ' a'+subscriptsReplace[k]+' ';
Logger.log(find)
var element = body.findText(find);
if(element){ // if found a match
var start = element.getStartOffset();
var text = element.getElement().asText();
text.replaceText(find, subscript);
text.setTextAlignment(start+2, start+2, DocumentApp.TextAlignment.SUBSCRIPT);
Logger.log("found one");
} // else do nothing
}
请注意,subscriptsReplace
是一个数组,其中包含整个文档中下标的所有数字。
我无法弄清楚为什么它没有得到重复,通过查看日志,我知道它不是 运行 重复的条件 - 所以它不会重新替换它已经替换的相同下标.
有人能看到发生了什么事吗?
谢谢!
你可以用这个替换整个正文中的所有内容:
function testReplace() {
var docBody = DocumentApp.getActiveDocument().getBody();
docBody.replaceText(searchPattern, replacement);
};
最终的问题是使用 replaceText() 替换了整个文档中出现的所有文本,因此,在第一次迭代后无法查找和替换格式。
这是替换所有出现的代码:
for (var k=0; k<subscriptsReplace.length; k++) {
find = 'a'+subscriptsReplace[k]+'_';
var element = body.findText(find);
if(element){ // if found a match
var start = element.getStartOffset();
var text = element.getElement().asText();
text.setTextAlignment(start+1, start+1, DocumentApp.TextAlignment.SUBSCRIPT);
text.deleteText(start+2, start+2);
} // else do nothing
}
你会看到,我没有替换,而是添加了一个特殊字符“_”作为查找标记,然后在重新格式化为下标时使用 deleteText() 一次删除它们 1 个
我正在尝试在 google 文档中查找文本并替换为下标符号 - 将 "a3" 替换为 a3,但现在将 3 格式化为下标。
基于答案here 我写了一些有效的代码,但 仅替换了任何出现的第一个实例 (有些重复)。
我写了以下内容:
for (var k=0; k<subscriptsReplace.length; k++) {
subscript = ' a'+subscriptsReplace[k];
find = ' a'+subscriptsReplace[k]+' ';
Logger.log(find)
var element = body.findText(find);
if(element){ // if found a match
var start = element.getStartOffset();
var text = element.getElement().asText();
text.replaceText(find, subscript);
text.setTextAlignment(start+2, start+2, DocumentApp.TextAlignment.SUBSCRIPT);
Logger.log("found one");
} // else do nothing
}
请注意,subscriptsReplace
是一个数组,其中包含整个文档中下标的所有数字。
我无法弄清楚为什么它没有得到重复,通过查看日志,我知道它不是 运行 重复的条件 - 所以它不会重新替换它已经替换的相同下标.
有人能看到发生了什么事吗? 谢谢!
你可以用这个替换整个正文中的所有内容:
function testReplace() {
var docBody = DocumentApp.getActiveDocument().getBody();
docBody.replaceText(searchPattern, replacement);
};
最终的问题是使用 replaceText() 替换了整个文档中出现的所有文本,因此,在第一次迭代后无法查找和替换格式。
这是替换所有出现的代码:
for (var k=0; k<subscriptsReplace.length; k++) {
find = 'a'+subscriptsReplace[k]+'_';
var element = body.findText(find);
if(element){ // if found a match
var start = element.getStartOffset();
var text = element.getElement().asText();
text.setTextAlignment(start+1, start+1, DocumentApp.TextAlignment.SUBSCRIPT);
text.deleteText(start+2, start+2);
} // else do nothing
}
你会看到,我没有替换,而是添加了一个特殊字符“_”作为查找标记,然后在重新格式化为下标时使用 deleteText() 一次删除它们 1 个