我是google doc script的新手。
在谷歌文档中,我需要搜索几个文本字符串(例如,"学生1"在光照字体中)以用另一个文本字符串替换这些文本字符串(例如," 学生A "),但采用粗体字体。
要搜索和替换,我使用以下代码:
function docReplace() {
var body = DocumentApp.getActiveDocument().getBody();
// change "student 1" to "Student A" in boldface
body.replaceText("student 1", "Student A");
}
以上代码仅替换"学生1"与#34;学生A"使用谷歌文档的当前字体,但我不知道如何将字体从光面改为粗体。
我试过
body.replaceText("student 1", "<b>Student A</b>");
当然,上面的代码不起作用。
任何帮助将不胜感激。谢谢。
答案 0 :(得分:5)
一种行人方式,用粗体字替换新文本字符串(例如“学生A ”)在Google文档中出现多次的文本字符串(例如“学生1”),是两步:
1-编写一个函数(称为docReplace),以常规/普通字体(无粗体)进行搜索和替换:
function docReplace() {
var body = DocumentApp.getActiveDocument().getBody();
// change "student 1" to "Student A"
body.replaceText("student 1", "Student A");
}
2-写一个函数(称为boldfaceText)来搜索所需的文本(例如,“Student A”)以及每次出现时该文本的两个偏移值(即startOffset和endOffsetInclusive)将这些偏移值中的字符的字体设置为粗体:
function boldfaceText(findMe) {
// put to boldface the argument
var body = DocumentApp.getActiveDocument().getBody();
var foundElement = body.findText(findMe);
while (foundElement != null) {
// Get the text object from the element
var foundText = foundElement.getElement().asText();
// Where in the Element is the found text?
var start = foundElement.getStartOffset();
var end = foundElement.getEndOffsetInclusive();
// Change the background color to yellow
foundText.setBold(start, end, true);
// Find the next match
foundElement = body.findText(findMe, foundElement);
}
}
上面的boldfaceText代码的灵感来自帖子Finding text (multiple times) and highlighting中的内容。
字符的偏移值只是描述文档中该字符位置的整数,第一个字符的偏移值为1(就像字符的坐标一样)。
使用“Student A”作为调用函数boldfaceText的参数,即
boldfaceText("Student A");
可以嵌入到函数docReplace中,即
function docReplace() {
var body = DocumentApp.getActiveDocument().getBody();
// change "student 1" to "Student A"
body.replaceText("student 1", "Student A");
// set all occurrences of "Student A" to boldface
boldfaceText("Student A");
}
在google doc中,只需运行脚本docReplace,将所有出现的“student 1”更改为“ Student A ”,粗体字。
以上两个函数(docReplace和boldfaceText)可能是将新手(比如我)引入谷歌文档脚本的好方法。经过一段时间玩谷歌文档脚本以获得一些熟悉,学习罗宾的更优雅和高级代码,一次完成上述两个步骤。
答案 1 :(得分:2)
可以通过简单的查找和替换来替换另一个字符串。
将它们设置为粗体有点困难,因为您必须获取正文的文本元素,并找到每个单词的开始和结束位置。
由于JS中的正则表达式不返回匹配数组,而是返回当前匹配的属性数组,因此您必须遍历该函数,该函数始终在最后一次匹配后开始。
function docReplace(input, output) {
var re = new RegExp(output,"g");
var body = DocumentApp.getActiveDocument().getBody();
body.replaceText(input, output);
var text = body.getText();
var index;
while(true){
index = re.exec(text)
if(index == null){break}
body.editAsText().setBold(index.index, output.length + index.index, true);
}
}