通过AppScript实现Google Sheets行分组并生成Google Slides
Google Sheet数据按自定义分组规则导入Google Slides
需求概述
我有一份Google Sheet表格,需要将其中的数据导入Google Slides,并且支持灵活的行分组规则:
- 可将A至C行分为一组生成单张幻灯片,D至F行分为另一组;
- 也可将D和F行合并为一组,A至C行各自单独生成幻灯片。
目前已有逐行生成幻灯片的AppScript代码,运行正常,需要修改代码满足上述分组需求。
现有代码
function newPresentation() { let templateId = "XXX"; let presentationTemplate = DriveApp.getFileById(templateId); let copy = presentationTemplate.makeCopy().getId(); let deck = SlidesApp.openById(copy); let slides = deck.getSlides(); let dataRange = SpreadsheetApp.getActive().getDataRange(); const ar = ["{{item}}", "{{results}}"]; // Sample object for replacing the placeholders. const [, ...sheetContents] = dataRange.getDisplayValues(); slides.forEach((slide, i) => ar.forEach((f, j) => slide.replaceAllText(f, sheetContents[i][j]))); }
修改方案(支持自定义分组)
通过定义分组配置数组实现灵活分组,每个分组元素指定要包含的行索引(从0开始,对应跳过表头后的数据行),再根据分组批量生成幻灯片:
修改后的代码
function newPresentationWithGroups() { // 配置项 const templateId = "XXX"; // 替换为你的模板ID const placeholders = ["{{item}}", "{{results}}"]; // 模板中的占位符 // 自定义分组规则:每个子数组代表一组,元素是sheetContents中的行索引(从0开始) // 示例1:A-C行(索引0-2)一组,D-F行(索引3-5)一组 // const groups = [[0,1,2], [3,4,5]]; // 示例2:A-C行各自单独一组,D和F行(索引3、5)一组 const groups = [[0], [1], [2], [3,5]]; // 复制模板并打开演示文稿 const presentationTemplate = DriveApp.getFileById(templateId); const copy = presentationTemplate.makeCopy().getId(); const deck = SlidesApp.openById(copy); const templateSlide = deck.getSlides()[0]; // 假设模板仅1张幻灯片作为生成模板 // 获取Sheet数据(跳过表头) const dataRange = SpreadsheetApp.getActive().getDataRange(); const [, ...sheetContents] = dataRange.getDisplayValues(); // 遍历分组生成幻灯片 groups.forEach(group => { // 复制模板幻灯片并移至末尾 const newSlide = templateSlide.duplicate(); deck.moveSlide(deck.getSlides().length - 1, newSlide); // 拼接分组内数据(可根据模板样式调整拼接逻辑,比如改为项目符号) const itemText = group.map(idx => sheetContents[idx][0]).join("\n"); const resultsText = group.map(idx => sheetContents[idx][1]).join("\n"); // 替换占位符 newSlide.replaceAllText(placeholders[0], itemText); newSlide.replaceAllText(placeholders[1], resultsText); }); // 删除原始模板幻灯片(可选,若不需要保留) templateSlide.remove(); }
代码说明
- 分组配置:通过
groups数组自定义分组规则,索引对应跳过表头后的表格数据行; - 幻灯片生成:基于模板幻灯片复制新幻灯片,每个分组对应一张;
- 数据拼接:用换行符连接分组内数据,可根据模板格式改为项目符号、分栏等样式;
- 占位符替换:将模板中的占位符替换为分组拼接后的内容。
使用说明
- 替换
templateId为你的Google Slides模板ID; - 调整
groups数组为目标分组规则; - 根据模板样式修改数据拼接逻辑;
- 运行
newPresentationWithGroups函数即可生成符合分组要求的演示文稿。
内容的提问来源于stack exchange,提问作者Arif Ahmed
相关产品推荐
相关产品推荐

