使用 Google 脚本更改 Google 文档中的段落标题文本

Change Paragraph Heading text in Google Docs using Google Scripts

我有一个 Google 具有以下样式的文档:

实际TOC为:

你可以看到它有几种风格:

我想制作一个在活动文档上运行的脚本并存储每个标题的内容以进行以下更改:

运行脚本后的最终结果应该是:

新目录应如下所示:

所以主要的变化是将 HEADER 2 内容放入普通文本行中,使其从目录中消失。有什么方法可以编写解决此问题的脚本吗?

参见下面的脚本:

function findHeader() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  // Define the search parameters
  var searchType = DocumentApp.ElementType.PARAGRAPH;
  var searchHeadings = [DocumentApp.ParagraphHeading.HEADING2, DocumentApp.ParagraphHeading.HEADING1, DocumentApp.ParagraphHeading.TITLE];
  var replacementHeadings = [DocumentApp.ParagraphHeading.NORMAL, DocumentApp.ParagraphHeading.HEADING2, DocumentApp.ParagraphHeading.HEADING1];
  var searchResult = null;
  
  // Style changes you want to apply
  var H2_N = {};
  H2_N[DocumentApp.Attribute.FONT_SIZE] = '11';
  // Since HEADING 2 that are made to be Normal becomes first Normal heading and first Normal heading is to be bold, 
  // You can directly make it bold here to reduce redundancy
  H2_N[DocumentApp.Attribute.BOLD] = true;

  var H1_H2 = {};
  H1_H2[DocumentApp.Attribute.FONT_SIZE] = '11';

  var T_H1 = {};
  T_H1[DocumentApp.Attribute.FONT_SIZE] = '14';
  T_H1[DocumentApp.Attribute.FOREGROUND_COLOR] = '#0000FF';
  T_H1[DocumentApp.Attribute.UNDERLINE] = true;

  var styles = [H2_N, H1_H2, T_H1];

  // Loop all searchHeadings
  searchHeadings.forEach((searchHeading, index) => {  
    // Search until the wanted searchHeading is found
    while (searchResult = body.findElement(searchType, searchResult)) {
      var par = searchResult.getElement().asParagraph();
      if (par.getHeading() == searchHeading) {
        // Replace with its corresponding replacementHeadings and apply approriate styles
        par.setHeading(replacementHeadings[index]);
        par.setAttributes(styles[index]);
      }
    }
  });
}

脚本行为摘要:

  • 降级以下标题(T -> H1H1 -> H2H2 -> N
  • 每次降级应用不同的样式:
    • T -> H1:14 点,蓝色,带下划线
    • H1 -> H2: 11分
    • H2 -> N: 11PT, 粗体
  • H2 -> N直接变成粗体,因为你想让第N段加粗。而H2在降级的时候变成了N,变成了第一个N。所以我们降级的时候直接把H2变成粗体就可以了。

输出:

参考文献: