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

能否通过GAS在Google Slides中按账户所有者批量生成证书?

实现方案:用Google Apps Script自动生成并合并证书幻灯片

核心逻辑

  • 从指定表格读取账户数据,按所有者分组归档
  • 根据账户得分匹配对应证书模板,复制模板页面到所有者专属幻灯片文件
  • 将生成的合并文件迁移到指定Drive文件夹

完整代码实现

function generateCertificates() {
  // 替换为你的实际资源ID(从对应文件链接中提取)
  const SPREADSHEET_ID = "1negtTNpsyLJDghquVa3SJLkYFFv4vVpDRB_G0u7pYl4";
  const TEMPLATE_100_ID = "1m0_rWaiCe2KdlkKWbzomlgQGJHffA584BURjciBdEYM";
  const TEMPLATE_BELOW_ID = "1xrxVSIlbLTNob-7PwngSz93Q_ufDNMad9gGdpLCIjXc";
  const TARGET_DRIVE_FOLDER_ID = "替换为目标Drive文件夹ID";

  // 读取表格数据
  const sheet = SpreadsheetApp.openById(SPREADSHEET_ID).getActiveSheet();
  const [headers, ...rows] = sheet.getDataRange().getValues();

  // 按所有者分组数据
  const ownerData = {};
  rows.forEach(row => {
    const owner = row[headers.indexOf("Owner")];
    const account = row[headers.indexOf("Account")];
    const score = row[headers.indexOf("Score")];
    
    if (!ownerData[owner]) ownerData[owner] = [];
    ownerData[owner].push({ account, score });
  });

  // 获取目标存储文件夹
  const targetFolder = DriveApp.getFolderById(TARGET_DRIVE_FOLDER_ID);

  // 批量生成合并证书
  Object.keys(ownerData).forEach(owner => {
    // 创建所有者专属幻灯片文件
    const presentation = SlidesApp.create(`${owner}的证书集合`);
    presentation.getSlides()[0].remove(); // 删除默认空白页

    // 为每个账户添加对应证书页面
    ownerData[owner].forEach(item => {
      // 选择对应模板
      const templateId = item.score === 100 ? TEMPLATE_100_ID : TEMPLATE_BELOW_ID;
      const templateSlide = SlidesApp.openById(templateId).getSlides()[0];
      
      // 复制模板页到目标文件
      presentation.appendSlide(templateSlide);
      
      // 替换模板中的占位文本(需确保模板中存在{{Account}}/{{Owner}}/{{Score}}占位符)
      const currentSlide = presentation.getSlides().pop();
      currentSlide.getShapes().forEach(shape => {
        const text = shape.getText();
        text.replaceAllText("{{Account}}", item.account);
        text.replaceAllText("{{Owner}}", owner);
        text.replaceAllText("{{Score}}", `${item.score}%`);
      });
    });

    // 将文件迁移到指定Drive文件夹
    const file = DriveApp.getFileById(presentation.getId());
    targetFolder.addFile(file);
    DriveApp.getRootFolder().removeFile(file);

    console.log(`${owner}的证书文件已生成并保存`);
  });
}

使用步骤

  1. 替换资源ID:将代码中所有占位的ID替换为你实际的文件/文件夹ID(ID可从文件链接的d/[ID]/edit部分提取)
  2. 匹配模板占位符:确保两款幻灯片模板中使用了{{Account}}、{{Owner}}、{{Score}}作为数据占位符,否则需修改代码中的替换文本
  3. 授权运行:首次运行脚本时,需授权GAS访问你的Sheets、Slides和Drive权限
  4. 测试与批量运行:先选取少量数据测试生成效果,确认无误后再批量处理全量数据

注意事项

  • 若表格表头列名与代码中假设的不同,需同步修改headers.indexOf("Owner")等对应的列名
  • 单次GAS脚本运行时长上限为6分钟,数据量过大时可拆分批次处理
  • 若模板存在除图片外的其他格式差异,可扩展代码中的模板匹配逻辑

内容的提问来源于stack exchange,提问作者Roxan Mae Mendoza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 05:23:37