如何修改Google Apps Script实现Google Sheets行不均匀分组并生成幻灯片
实现Google Sheets行的不均匀分组并生成Google Slides
我有一个Google Sheets表格,希望将表格中的行按照指定的不均匀数量(如
[2,3,2,3,4,2,2,1,9])进行分组,再基于分组结果生成Google Slides。目前我已有一段可实现固定3行分组的Google Apps Script代码(如下所示),该代码运行正常,但我需要修改它以支持不均匀行数的分组,请问具体该如何实现?
原代码:
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(); // I modified the below script. const ar = ["{{audit#}}", "{{results#}}"]; const [, ...sheetContents] = dataRange.getDisplayValues(); const values = [...Array(Math.ceil(sheetContents.length / 3))].map((_) => sheetContents.splice(0, 3)); // ref: https://github.com/tanaikech/UtlApp#splitarray slides.shift(); slides.forEach((slide, i) => values[i].forEach((g, k) => ar.forEach((f, j) => slide.replaceAllText(f.replace(/#/, k + 1), g[j])) ) ); }
修改方案
核心是把固定按3行分割的逻辑,替换为按指定的不均匀分组数组来分割数据行,同时增加边界处理避免报错。修改后的完整代码如下:
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 groupSizes = [2,3,2,3,4,2,2,1,9]; const ar = ["{{audit#}}", "{{results#}}"]; const [, ...sheetContents] = dataRange.getDisplayValues(); // 按指定分组数量分割数据行,剩余行数不足时取全部剩余行 const values = groupSizes.map(size => { return sheetContents.splice(0, Math.min(size, sheetContents.length)); }); slides.shift(); slides.forEach((slide, i) => { // 仅处理有对应分组数据的幻灯片,避免数量不匹配报错 if (values[i]) { values[i].forEach((g, k) => ar.forEach((f, j) => slide.replaceAllText(f.replace(/#/, k + 1), g[j] || "")) ); } }); }
关键修改点说明
- 自定义分组数组:新增
groupSizes变量,填入你需要的不均匀分组数值,示例为[2,3,2,3,4,2,2,1,9],可根据需求调整。 - 替换分组逻辑:用
groupSizes.map()替代原固定3行的分割逻辑,每次从sheetContents中截取对应数量的行;通过Math.min(size, sheetContents.length)避免剩余行数不足时出现错误。 - 容错处理:遍历幻灯片时增加
if (values[i])判断,确保仅处理有对应分组数据的幻灯片;用g[j] || ""处理行内数据缺失的情况,防止替换空值时出错。
内容的提问来源于stack exchange,提问作者Arif Ahmed
相关产品推荐
相关产品推荐

