如何让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
相关产品推荐
相关产品推荐

