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

hea*_*ind 5 google-docs google-apps-script

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

例如,我想要“狗”的每个实例......

  • 小狗

并使用“标题 2”为“狗”设置样式,使其看起来像:

  • 小狗

使用 Find in App Scripts on Sheets 在网上随处可见,但在 Docs 中使用 App Scripts 的例子并不多。Sheets 没有将文本重新格式化为标题的选项,因此没有示例。

小智 6

使用方法有:

  • findText,应用于文档正文。它找到第一个匹配项;通过将前一个匹配项作为第二个参数“from”传递,可以找到后续匹配项。搜索模式是一个以字符串形式呈现的正则表达式,在这个例子中(?i)\\bdogs\\b, (?i) 表示不区分大小写的搜索,并\\b转义为\b,表示词边界——所以我们不重新设计“hotdogs”和“dogs”。
  • 获取元素,应用于 findText 返回的 RangeElement。重点是,匹配的文本只能是元素的一部分,这部分称为 RangeElement。我们不能仅将标题样式应用于一部分,因此会获得整个元素。
  • getParent,应用于 getElement 返回的 Text 元素。同样,这是因为标题样式适用于文本上方的级别。
  • setAttributes具有适当的样式(预先创建的对象,使用适当的enums)。这适用于 Text 的父级,无论它是什么——段落、项目符号等。人们可能希望对此更有选择性,并首先检查元素类型,但我不这样做这里。

例子:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)