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

如何通过固定链接实现Google Sheets填充Google Slides模板并生成PDF

解决方案:搭建自动更新+PDF下载的固定链接服务

基于Google Apps Script实现,用户点击链接即可自动拉取Sheets最新数据更新Slides,并触发PDF下载。

步骤1:准备工作

  • 确认Slides模板中的标签(如{Address})与Sheets数据列标题完全匹配,比如Sheets列名Address对应Slides的{Address}。
  • 提取并记录Slides和Sheets的ID(从文件URL中获取,格式为https://docs.google.com/presentation/d/[SLIDES_ID]/edit)。

步骤2:编写Apps Script代码

打开Slides的脚本编辑器(点击「扩展程序」→「Apps Script」),替换默认代码为以下内容:

function doGet(e) {
  // 替换为你的Slides、Sheets ID和工作表名称
  const SLIDES_ID = "你的Slides模板ID";
  const SHEETS_ID = "你的Sheets数据文件ID";
  const SHEET_NAME = "数据所在工作表名称";
  
  // 1. 复制模板幻灯片,避免修改原文件
  const template = SlidesApp.openById(SLIDES_ID);
  const tempSlide = template.makeCopy("临时幻灯片_" + new Date().getTime());
  const tempSlideId = tempSlide.getId();
  
  // 2. 从Sheets读取最新数据
  const sheet = SpreadsheetApp.openById(SHEETS_ID).getSheetByName(SHEET_NAME);
  const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
  const dataRow = sheet.getRange(2, 1, 1, sheet.getLastColumn()).getValues()[0]; // 数据默认取第2行,可自行调整行号
  
  // 构建标签-数据映射
  const dataMap = {};
  headers.forEach((header, index) => {
    dataMap[`{${header}}`] = dataRow[index] || "";
  });
  
  // 3. 批量替换幻灯片中的所有标签
  tempSlide.getSlides().forEach(slide => {
    slide.getShapes().forEach(shape => {
      const text = shape.getText();
      Object.keys(dataMap).forEach(tag => {
        if (text.asString().includes(tag)) {
          text.replaceAllText(tag, dataMap[tag]);
        }
      });
    });
  });
  
  // 4. 生成PDF下载链接并返回自动跳转页面
  const pdfUrl = `https://docs.google.com/presentation/d/${tempSlideId}/export/pdf`;
  const html = HtmlService.createHtmlOutput(`
    <!DOCTYPE html>
    <html>
      <body>
        <p>正在生成PDF,请稍候...</p>
        <script>
          window.location.href = "${pdfUrl}";
          // 5秒后自动清理临时幻灯片
          setTimeout(() => google.script.run.deleteTempSlide("${tempSlideId}"), 5000);
        </script>
      </body>
    </html>
  `);
  return html;
}

// 辅助函数:删除临时幻灯片
function deleteTempSlide(slideId) {
  try {
    DriveApp.getFileById(slideId).setTrashed(true);
  } catch (e) {
    console.log("临时文件清理失败:" + e.message);
  }
}

步骤3:部署为Web App

  1. 点击脚本编辑器右上角「部署」→「新部署」。
  2. 选择部署类型为「Web 应用」。
  3. 配置权限:
    • 执行:选择「我」(以你的权限运行脚本,确保能访问Slides和Sheets)。
    • 访问权限:根据需求选择「任何人,甚至匿名」或「仅限指定用户」。
  4. 点击「部署」,复制生成的固定链接,这就是要分享给用户的链接。

关键细节

  • 临时文件机制:每次请求都会复制新的幻灯片模板,不会修改原文件,避免多人操作冲突。
  • 数据行调整:若Sheets数据不在第2行,修改代码中sheet.getRange(2, 1, 1, ...)的行号即可。
  • 权限兼容:若选择匿名访问,需确保脚本权限能读取私有Slides/Sheets(通过「部署」时的执行账户权限实现)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:01:14