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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:45:02