请求编写Google Sheets脚本:添加带分组的试验行并支持起始位置输入
表格自动化扩展解决方案(含自定义菜单与用户输入功能)
下面是完整的Google Apps脚本,实现你需要的所有自动化操作,同时支持用户输入新行起始位置:
// 表格打开时自动创建自定义菜单 function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('表格自动化') .addItem('添加新分组', 'addNewGroup') .addToUi(); } // 核心功能:添加新分组并完成所有设置 function addNewGroup() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getActiveSheet(); // 弹窗让用户输入新分组的起始行号 const input = Browser.inputBox('设置新分组位置', '请输入要插入新8行的起始行号(整数)', Browser.Buttons.OK_CANCEL); // 用户取消输入则终止操作 if (input === 'cancel') return; const startRow = parseInt(input); // 验证输入有效性 if (isNaN(startRow) || startRow < 2) { Browser.msgBox('输入错误', '请输入有效的正整数行号(至少为2,避免覆盖表头)', Browser.Buttons.OK); return; } try { // 1. 在指定起始行前插入8行 sheet.insertRowsBefore(startRow, 8); // 2. 设置行分组:首行为顶级父行,其余7行作为子行缩进1级 const childRowsRange = sheet.getRange(startRow + 1, 1, 7, sheet.getLastColumn()); childRowsRange.shiftRowGroupDepth(1); // 3. 复制上一组顶级行的表头与计算公式 const sourceRow = sheet.getRange(startRow - 1, 1, 1, sheet.getLastColumn()); const targetRow = sheet.getRange(startRow, 1, 1, sheet.getLastColumn()); // 先复制公式,再复制格式 sourceRow.copyTo(targetRow, SpreadsheetApp.CopyPasteType.PASTE_FORMULA, false); sourceRow.copyTo(targetRow, SpreadsheetApp.CopyPasteType.PASTE_FORMAT, false); // 4. 折叠新添加的分组 const newGroup = sheet.getRowGroup(startRow, 8); newGroup.collapse(); Browser.msgBox('操作完成', '已成功添加新分组并完成所有配置', Browser.Buttons.OK); } catch (error) { Browser.msgBox('操作失败', '错误信息:' + error.message, Browser.Buttons.OK); } }
功能说明
- 自定义菜单:打开表格后顶部会出现「表格自动化」菜单,点击「添加新分组」即可触发操作
- 用户指定位置:通过弹窗输入起始行号,灵活控制新分组的插入位置
- 自动插入8行:在指定位置前插入8行数据行
- 智能分组:新插入的8行自动分组,首行作为顶级父行,其余7行缩进为子行
- 公式与格式复制:自动复制上一组顶级行的计算公式和表头格式,保证样式与逻辑一致
- 自动折叠:完成操作后自动折叠新分组,保持表格整洁
使用步骤
- 打开你的Google表格,点击「扩展程序」→「Apps脚本」
- 删除现有脚本内容,粘贴上述代码
- 保存脚本(可命名为「TableAutomation」),关闭脚本编辑器
- 刷新表格,顶部菜单栏会出现「表格自动化」选项
- 点击「添加新分组」,按照提示输入起始行号即可完成所有操作
内容的提问来源于stack exchange,提问作者Hibiki
相关产品推荐
相关产品推荐

