如何用Apps Script实现合并重复行并通过onEdit触发器自动运行
Google表格Apps Script自动合并重复行实现方案
核心代码
将以下代码粘贴到你的Apps Script编辑器中,根据实际场景修改顶部配置项即可:
// 自定义配置项,根据你的表格情况修改 const CONFIG = { TARGET_SHEET_NAME: "Sheet1", // 需要执行合并的工作表名称 MERGE_COLUMN_INDEX: 1, // 用于判断重复的列序号:A列=1,B列=2,以此类推 DATA_START_ROW: 2 // 数据起始行,若表头占1行则填2,避免合并表头 } function autoMergeDuplicateRows(e) { // 仅响应目标工作表的编辑操作 const activeSheet = e.range.getSheet(); if (activeSheet.getName() !== CONFIG.TARGET_SHEET_NAME) return; const lastRow = activeSheet.getLastRow(); // 数据行数不足时直接退出 if (lastRow < CONFIG.DATA_START_ROW) return; // 先解除目标列所有现有合并,避免旧格式干扰 const targetColRange = activeSheet.getRange(CONFIG.DATA_START_ROW, CONFIG.MERGE_COLUMN_INDEX, lastRow - CONFIG.DATA_START_ROW + 1); targetColRange.breakApart(); const colValues = targetColRange.getValues(); let startMergeRow = CONFIG.DATA_START_ROW; let currentCompareValue = colValues[0][0]; // 遍历判断连续重复值 for (let i = 1; i < colValues.length; i++) { if (colValues[i][0] === currentCompareValue && currentCompareValue !== "") { continue; } // 出现不同值时,合并之前的连续重复行 const endMergeRow = i + CONFIG.DATA_START_ROW - 1; if (endMergeRow > startMergeRow) { activeSheet.getRange(startMergeRow, CONFIG.MERGE_COLUMN_INDEX, endMergeRow - startMergeRow + 1).mergeVertically(); } // 重置对比基准 startMergeRow = i + CONFIG.DATA_START_ROW; currentCompareValue = colValues[i][0]; } // 处理最后一组连续重复值 if (lastRow > startMergeRow) { activeSheet.getRange(startMergeRow, CONFIG.MERGE_COLUMN_INDEX, lastRow - startMergeRow + 1).mergeVertically(); } }
onEdit触发器配置步骤
- 打开目标Google表格,点击顶部菜单栏「扩展程序」→「Apps Script」进入脚本编辑页面,粘贴上述代码并保存项目
- 点击编辑器左侧菜单栏「触发器」选项,点击右下角「添加触发器」按钮,按以下规则配置:
- 选择要运行的函数:
autoMergeDuplicateRows - 选择事件来源:
来自电子表格 - 选择事件类型:
编辑时 - 失败通知规则按需选择,配置完成后点击保存即可
- 选择要运行的函数:
注意事项
- 合并操作不可逆,首次使用前建议先备份表格数据
- 代码默认跳过空值,不会合并空行
- 如果需要多列合并,可调整
MERGE_COLUMN_INDEX参数或修改逻辑遍历多列执行
内容的提问来源于stack exchange,提问作者Onkar Pawar
相关产品推荐
相关产品推荐

