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

如何让Google Apps Script正确合并表格末尾符合条件的行?

修复Google Apps Script末尾行合并问题

原脚本无法合并表格末尾符合条件的行,原因是循环内处理最后一行的逻辑存在疏漏,导致最后一组连续相同值的行可能未被正确收集。以下是调整后的完整代码:

function mergeCustomerOrderRows() {
  const spreadsheetId = "GOOGLE_SHEET_ID";
  const sheetName = "SHEET_NAME";
  const mergeColumns = ["A", "B", "C", "D", "E"];
  const checkCol = 2; // 第二列(B列)

  try {
    const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
    const values = sheet.getDataRange().getValues();
    let temp = "";
    let tempAr = [];
    const ar = [];

    for (let i = 0; i < values.length; i++) {
      const v = values[i][checkCol - 1];
      const row = i + 1;
      if (v == temp) {
        tempAr.push(row);
      } else {
        if (tempAr.length > 0) {
          ar.push(tempAr);
        }
        tempAr = [row];
        temp = v;
      }
    }
    // 循环结束后,将最后一组行加入数组(关键修改)
    if (tempAr.length > 0) {
      ar.push(tempAr);
    }

    ar.filter(r => r.length > 1).forEach(r => {
      const start = r[0]; // 取组内第一行
      const end = r[r.length - 1]; // 取组内最后一行
      mergeColumns.forEach(m => {
        const range = sheet.getRange(`${m}${start}:${m}${end}`);
        if (!range.isPartOfMerge()) {
          range.merge();
        }
      });
    });

    SpreadsheetApp.flush();
    Logger.log("基于第二列匹配的合并已完成。");
    return ContentService.createTextOutput("已根据第二列条件成功合并单元格");
  } catch (error) {
    Logger.log(`错误: ${error.message}`);
    return ContentService.createTextOutput(`错误: ${error.message}`);
  }
}

关键修改说明

  • 移除了循环内部针对最后一行的判断逻辑,改为循环结束后统一处理最后一组行,确保无论末尾行是否连续相同,都能被正确收集到待合并数组中。
  • 调整了行组起始和结束行的获取方式(r[0]和r[r.length-1]),逻辑更直观,避免shift()和pop()修改原数组的潜在问题。

内容的提问来源于stack exchange,提问作者Mikat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:47:14