You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过脚本为含Heading 1/2的Google Docs生成目录?是否可行?

如何通过脚本为Google Docs生成目录(TOC)

当然可以通过Google Apps Script自动生成目录,完全不用依赖Docs菜单的手动操作!你提到的Class TableOfContents正是官方提供的核心工具,下面我会一步步教你实现:

核心实现思路

Google Apps Script允许你直接操控Docs的内容结构,通过Body.appendTableOfContents()或Paragraph.insertTableOfContents()方法,就能在指定位置插入可自动更新的目录,还能自定义包含的标题级别、样式等参数。

完整代码示例

下面是一个实用脚本,会在文档开头插入包含Heading 1和Heading 2的目录:

function generateTOC() {
  // 获取当前打开的Google文档实例
  const doc = DocumentApp.getActiveDocument();
  const body = doc.getBody();
  
  // 在文档最开头插入目录,指定包含H1和H2级别
  const toc = body.insertTableOfContents(0)
    .setIncludeHeadingLevels([1, 2]); // 可按需调整,比如[1,2,3]会包含H3标题
  
  // 可选:给目录添加醒目的标题
  body.insertParagraph(0, "目录")
    .setHeading(DocumentApp.ParagraphHeading.HEADING1);
  
  // 保存并刷新文档
  doc.saveAndClose();
}

关键代码解释

  • getActiveDocument():获取当前正在编辑的文档
  • insertTableOfContents(position):在指定索引位置插入目录,0代表文档最开头;如果要把目录放在末尾,用appendTableOfContents()即可,无需传位置参数
  • setIncludeHeadingLevels(levels):传入标题级别数组,精准控制要纳入目录的标题层级

额外技巧:自动更新已存在的目录

如果后续文档标题有修改,也可以用脚本一键刷新目录:

function updateTOC() {
  const doc = DocumentApp.getActiveDocument();
  const body = doc.getBody();
  
  // 找到文档中的第一个目录(若有多个可循环处理)
  const toc = body.getTablesOfContents()[0];
  if (toc) {
    toc.update(); // 刷新目录内容
  }
  
  doc.saveAndClose();
}

注意事项

  • 首次运行需要授权:按照提示允许脚本访问你的文档即可,属于正常的权限验证流程
  • 动态特性:脚本生成的目录和手动创建的完全一致,既支持脚本更新,也能右键选择「更新目录」手动刷新
  • 样式自定义:可以通过setAttributes()方法调整目录字体、颜色等样式,比如toc.setAttributes({fontSize: 12, bold: false})

内容的提问来源于stack exchange,提问作者Ingeborg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:12:49