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

Google Sheets脚本优化:新增行时自动合并列值并重置格式

解决Google Sheets新增行后N列合并单元格异常问题

原有脚本存在多个关键问题导致新增行后合并异常,包括未清除旧合并、工作表定位错误、数据范围计算不准以及缺少水平线格式化逻辑。以下是修正后的完整解决方案:

修正后的脚本

function mergePeriodCells() {
  const sheetName = "BANQUE";
  const startRow = 28;
  const targetCol = 14; // N列对应列索引
  
  // 定位目标工作表
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
  if (!sheet) return;
  
  // 获取有效数据行范围,提前取消所有旧合并
  const lastRow = sheet.getLastRow();
  if (lastRow < startRow) return;
  sheet.getRange(startRow, targetCol, lastRow - startRow + 1, 1).unmerge();
  
  // 提取N列非空数据(仅保留连续有效行)
  const data = sheet.getRange(startRow, targetCol, lastRow - startRow + 1, 1)
    .getValues()
    .map(row => row[0])
    .filter(val => val !== "");
  
  if (data.length === 0) return;
  
  // 分组统计连续相同值的行数
  const mergeGroups = [];
  let currentVal = data[0];
  let count = 1;
  
  for (let i = 1; i < data.length; i++) {
    if (data[i] === currentVal) {
      count++;
    } else {
      mergeGroups.push({ value: currentVal, rowCount: count });
      currentVal = data[i];
      count = 1;
    }
  }
  mergeGroups.push({ value: currentVal, rowCount: count });
  
  // 执行合并并添加水平线
  let currentRow = startRow;
  mergeGroups.forEach(group => {
    // 合并单元格并垂直居中
    const mergeRange = sheet.getRange(currentRow, targetCol, group.rowCount, 1);
    mergeRange.merge().setVerticalAlignment("middle");
    
    // 在合并块底部添加水平线
    const bottomRow = currentRow + group.rowCount - 1;
    sheet.getRange(bottomRow, targetCol, 1, 1)
      .setBorder(null, null, true, null, null, null, "#000000", SpreadsheetApp.BorderStyle.SOLID);
    
    currentRow += group.rowCount;
  });
}

关键修改说明

  • 精准定位工作表:直接通过名称锁定BANQUE标签页,避免切换标签时出错
  • 先清除旧合并:新增行前强制取消N列所有原有合并,消除新旧合并范围冲突
  • 连续值分组合并:改用循环遍历统计连续相同值的行数,彻底解决原有脚本将非连续相同值错误合并的问题
  • 自动添加水平线:在每个合并块的最后一行添加底部实线边框,匹配对账单的视觉分隔需求
  • 优化数据范围:仅处理从起始行到最后一行的有效数据,避免无效空行干扰

使用方式

  1. 替换原有myFunction为上述脚本,可保留或修改函数名
  2. 配置自动触发:打开「扩展程序」→「Apps脚本」,进入触发器页面,添加onChange类型触发器绑定该函数,新增行时会自动执行合并操作
  3. 手动测试:直接在脚本编辑器中运行函数,验证合并效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:48:21