谷歌文档脚本,搜索和替换文本字符串和更改字体(例如,粗体)

时间:2015-10-19 01:31:07

标签: google-apps-script

我是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>");

当然,上面的代码不起作用。

任何帮助将不胜感激。谢谢。

2 个答案:

答案 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);
  }
}