如何用AppScript实现按条件合并单元格及添加分隔边框
Google Sheets AppScript 实现分类合并与分隔边框
需求实现代码
以下是直接可用的AppScript代码,可实现你提出的两个需求:
function formatCategoryTable() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const dataRange = sheet.getDataRange(); const values = dataRange.getValues(); const lastRow = dataRange.getLastRow(); const lastCol = dataRange.getLastColumn(); // 清除现有合并单元格和边框,避免重复操作冲突 sheet.getRange(1, 1, lastRow, lastCol).unmerge(); sheet.getRange(1, 1, lastRow, lastCol).clearFormat(); let startRow = 2; // 假设第一行是表头,从第二行开始处理数据 let currentCategory = values[startRow - 1][2]; // C列索引为2(数组从0开始计数) // 遍历行处理合并与边框逻辑 for (let i = startRow; i <= lastRow; i++) { const rowCategory = values[i - 1][2]; // 分类变化或到达表格末尾时执行操作 if (rowCategory !== currentCategory || i === lastRow) { const endRow = i === lastRow ? i : i - 1; // 合并对应D列的单元格(D列索引为3) sheet.getRange(startRow, 4, endRow - startRow + 1, 1).merge(); // 在分类最后一行添加底部分隔边框 sheet.getRange(endRow, 1, 1, lastCol).setBorder(null, null, true, null, null, null, '#000000', SpreadsheetApp.BorderStyle.SOLID); // 更新起始行与当前分类标记 startRow = i; currentCategory = rowCategory; } } }
代码说明
- 格式重置:先解除所有合并单元格并清除格式,避免旧格式干扰新操作
- 分类跟踪:从表头后第一行开始,持续跟踪当前分类,当分类切换或到表格末尾时触发合并与边框设置
- 单元格合并:对相同分类对应的D列连续行执行合并操作
- 分隔边框:在每个分类的最后一行底部添加黑色实线边框,实现分类间的视觉分隔
使用注意事项
- 若你的表头不在第一行,需修改代码中
startRow的数值 - 请先将C列(Category)按值排序,否则非连续的相同分类会被错误合并
- 操作路径:打开Google Sheets → 点击「扩展程序」→「Apps脚本」→ 粘贴代码并保存 → 运行
formatCategoryTable函数
内容的提问来源于stack exchange,提问作者arniem
相关产品推荐
相关产品推荐

