使用Google Apps脚本将标题样式应用于单词的所有实例

时间:2017-10-10 20:37:33

标签: google-apps-script google-docs

我在Google文档中使用Google App Scripts,您如何编写一个函数来查找单词的所有实例并对其应用标题样式:

例如,我想要" Dogs" ...

的每个实例
  
      
  •   
  •   
  •   

和风格"狗"用"标题2"所以它看起来像:

  
      
  •   
  •   
  •   

在表格中使用“在应用程序脚本中查找”无处不在,但在文档中使用应用程序脚本的示例并不多。表单没有选项将文本重新格式化为标题,因此没有示例。

1 个答案:

答案 0 :(得分:3)

使用的方法是:

  • findText,适用于文件正文。它找到了第一场比赛;通过将前一个匹配作为第二个参数"来自"来找到后续匹配。搜索模式是一个以字符串形式表示的正则表达式,在此示例中为(?i)\\bdogs\\b,其中(?i)表示不区分大小写的搜索,而\\b正在转义为\b,这意味着单词边界 - 所以我们不会重温热狗"以及#34;狗"。
  • getElement,应用于findText返回的RangeElement。关键是,匹配文本只能是元素的一部分,这部分称为RangeElement。我们不能仅将标题样式应用于零件,因此可以获得整个元素。
  • getParent,应用于getElement返回的Text元素。同样,这是因为标题样式适用于Text之上的级别。
  • setAttributes具有正确的样式(使用适当的enums预先创建的对象)。这适用于Text的父级,无论它碰巧是什么 - 一个段落,一个子弹项目等。人们可能希望对此更具选择性,并首先检查type of the element,但我不会'这样做。

示例:

function dogs() {
  var body = DocumentApp.getActiveDocument().getBody();
  var style = {};
  style[DocumentApp.Attribute.HEADING] = DocumentApp.ParagraphHeading.HEADING2;
  var pattern = "(?i)\\bdogs\\b";

  var found = body.findText(pattern);
  while (found) {
    found.getElement().getParent().setAttributes(style);
    found = body.findText(pattern, found);
  }
}