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

求脚本:从Google Slides提取带HTML标签的笔记至Google Sheets并拆分内容

批量提取Google Slides演讲笔记并按模块导入Google Sheets(保留HTML格式)

核心解决方案:Google Apps Script直接处理

直接通过Slides API读取带格式的演讲笔记,识别固定加粗标题后拆分模块,再写入Sheets并保留HTML格式,是最高效的规模化处理方式。以下是完整脚本,可直接在Google Apps Script编辑器中运行:

function extractSlidesNotesToSheets() {
  // 替换为你的演示文稿ID和目标表格ID
  const PRESENTATION_ID = "你的Google Slides ID";
  const SHEET_ID = "你的Google Sheets ID";
  
  const presentation = SlidesApp.openById(PRESENTATION_ID);
  const slides = presentation.getSlides();
  const sheet = SpreadsheetApp.openById(SHEET_ID).getActiveSheet();
  
  // 清空表格现有内容(可选,根据需求调整)
  sheet.clearContents();
  // 写入表头
  sheet.appendRow(["幻灯片编号", "Comments", "Notes to Instructor", "Notes to Student"]);
  
  // 遍历每张幻灯片
  slides.forEach((slide, index) => {
    const slideNum = index + 1;
    const notesPage = slide.getNotesPage();
    const notesText = notesPage.getSpeakerNotesShape().getText();
    const paragraphs = notesText.getParagraphs();
    
    // 初始化三个模块的HTML内容
    let commentsHtml = "";
    let instructorNotesHtml = "";
    let studentNotesHtml = "";
    let currentModule = null;
    
    // 解析每个段落,识别标题并归类内容
    paragraphs.forEach(paragraph => {
      const textRange = paragraph.getText();
      const runs = textRange.getRuns();
      let paragraphHtml = "";
      let isBoldTitle = false;
      let titleText = "";
      
      // 检查段落是否为加粗的固定标题
      runs.forEach(run => {
        const text = run.getText();
        const style = run.getTextStyle();
        if (style.isBold()) {
          titleText += text;
          isBoldTitle = true;
        }
        // 生成当前文本片段的HTML
        let runHtml = text;
        if (style.isBold()) runHtml = `<b>${runHtml}</b>`;
        if (style.isItalic()) runHtml = `<i>${runHtml}</i>`;
        if (style.isUnderline()) runHtml = `<u>${runHtml}</u>`;
        paragraphHtml += runHtml;
      });
      
      // 匹配固定标题,切换当前模块
      if (isBoldTitle) {
        switch(titleText.trim()) {
          case "Comments":
            currentModule = "comments";
            break;
          case "Notes to Instructor":
            currentModule = "instructor";
            break;
          case "Notes to Student":
            currentModule = "student";
            break;
          default:
            currentModule = null;
        }
        // 标题本身也加入对应模块的HTML
        if (currentModule) {
          paragraphHtml += "<br>";
        }
      }
      
      // 将段落HTML加入当前模块
      if (currentModule && paragraphHtml.trim() !== "") {
        switch(currentModule) {
          case "comments":
            commentsHtml += paragraphHtml + "<br>";
            break;
          case "instructor":
            instructorNotesHtml += paragraphHtml + "<br>";
            break;
          case "student":
            studentNotesHtml += paragraphHtml + "<br>";
            break;
        }
      }
    });
    
    // 处理多余的换行
    commentsHtml = commentsHtml.replace(/<br>$/, "");
    instructorNotesHtml = instructorNotesHtml.replace(/<br>$/, "");
    studentNotesHtml = studentNotesHtml.replace(/<br>$/, "");
    
    // 将当前幻灯片的数据写入表格
    const row = [slideNum, commentsHtml, instructorNotesHtml, studentNotesHtml];
    const newRow = sheet.appendRow(row);
    
    // 为每个模块的单元格设置HTML格式
    sheet.getRange(newRow.getRow(), 2).setHtmlContent(commentsHtml);
    sheet.getRange(newRow.getRow(), 3).setHtmlContent(instructorNotesHtml);
    sheet.getRange(newRow.getRow(), 4).setHtmlContent(studentNotesHtml);
  });
  
  SpreadsheetApp.getUi().alert("笔记提取完成!");
}

关键逻辑说明

  1. 格式识别与HTML转换:遍历笔记中的每个文本片段,根据Slides的文本样式(加粗、斜体、下划线)生成对应的HTML标签,确保格式完整保留。
  2. 标题匹配与模块切换:通过检查段落中的加粗文本是否匹配固定标题(Comments/Notes to Instructor/Notes to Student),自动切换内容归类的目标模块。
  3. 高效写入Sheets:先写入纯文本行,再通过setHtmlContent方法为单元格设置HTML格式,既保证写入效率,又保留样式。

替代思路:PDF导出中转处理

如果Slides笔记包含复杂格式(如列表、颜色)导致直接API处理受限,可通过以下步骤中转:

  1. 导出带笔记的PDF:在Google Slides中选择「文件」→「下载」→「PDF文档」,勾选「包含演讲者笔记」选项,导出PDF文件。
  2. PDF文本提取:使用Google Apps Script的DriveApp读取PDF,结合内置的PDF解析能力提取带格式的笔记文本。
  3. 模块拆分与写入:通过正则表达式匹配加粗标题(PDF中加粗文本通常会有特殊标记),拆分三个模块后写入Sheets并转换为HTML格式。

注意:该方法需额外处理PDF格式的解析,复杂度高于直接API处理,仅推荐用于极端复杂格式的场景。

内容的提问来源于stack exchange,提问作者d-ron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:52:42