能否通过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}的证书文件已生成并保存`); }); }
使用步骤
- 替换资源ID:将代码中所有占位的ID替换为你实际的文件/文件夹ID(ID可从文件链接的
d/[ID]/edit部分提取) - 匹配模板占位符:确保两款幻灯片模板中使用了
{{Account}}、{{Owner}}、{{Score}}作为数据占位符,否则需修改代码中的替换文本 - 授权运行:首次运行脚本时,需授权GAS访问你的Sheets、Slides和Drive权限
- 测试与批量运行:先选取少量数据测试生成效果,确认无误后再批量处理全量数据
注意事项
- 若表格表头列名与代码中假设的不同,需同步修改
headers.indexOf("Owner")等对应的列名 - 单次GAS脚本运行时长上限为6分钟,数据量过大时可拆分批次处理
- 若模板存在除图片外的其他格式差异,可扩展代码中的模板匹配逻辑
内容的提问来源于stack exchange,提问作者Roxan Mae Mendoza
相关产品推荐
相关产品推荐

