Google Sheets自动汇总多工作表指定列数据至主表需求
自动汇总多个未知名称工作表数据到主表(Google Sheets + Apps Script)
核心实现思路
通过Google Apps Script遍历所有工作表,自动跳过主表本身,提取每个目标工作表中CD至CJ列的有效数据,最终合并到主表的A至G列,后续新增同格式工作表无需修改代码即可自动纳入汇总。
完整脚本代码
打开你的Google Sheets,点击菜单栏「扩展程序」→「Apps Script」,清空默认代码,粘贴以下脚本:
function aggregateData() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const mainSheetName = "主表"; // 替换为你的主工作表实际名称 const mainSheet = ss.getSheetByName(mainSheetName); if (!mainSheet) { SpreadsheetApp.getUi().alert("未找到名为「" + mainSheetName + "」的工作表,请检查名称!"); return; } // 清空主表现有数据(假设A1-G1是表头,从A2开始清空) const mainLastRow = mainSheet.getLastRow(); if (mainLastRow > 1) { mainSheet.getRange(2, 1, mainLastRow - 1, 7).clearContent(); } let combinedData = []; const sheets = ss.getSheets(); // 遍历所有工作表 sheets.forEach(sheet => { if (sheet.getName() === mainSheetName) return; // 跳过主表 // 获取当前工作表CD到CJ列的数据(CD对应第80列,CJ对应第86列) const dataRange = sheet.getRange(2, 80, sheet.getLastRow() - 1, 7); const sheetData = dataRange.getValues(); // 过滤空行,避免汇总无效数据 const filteredData = sheetData.filter(row => row.some(cell => cell !== "")); combinedData = combinedData.concat(filteredData); }); // 将合并后的数据写入主表 if (combinedData.length > 0) { mainSheet.getRange(2, 1, combinedData.length, 7).setValues(combinedData); } } // 设置自动触发:工作表新增/修改时自动汇总 function createOnChangeTrigger() { const ss = SpreadsheetApp.getActiveSpreadsheet(); ScriptApp.newTrigger("aggregateData") .forSpreadsheet(ss) .onChange() .create(); }
关键说明
- 主表名称配置:修改
mainSheetName变量为你实际的主工作表名称,比如「汇总表」。 - 列对应规则:脚本中
CD列对应第80列、CJ列对应第86列,遵循Google Sheets列号规则(A=1,B=2…CD=80),无需手动调整。 - 空行过滤:自动跳过源工作表中的空行,避免主表出现无效空数据。
- 自动触发设置:运行一次
createOnChangeTrigger函数,之后新增工作表或修改源表数据时,会自动触发汇总;也可手动点击脚本编辑器的运行按钮执行汇总。
注意事项
- 首次运行脚本时,需要授权Google Apps Script访问你的表格数据,按照提示完成授权即可。
- 确保源工作表的
CD至CJ列数据格式一致,避免出现数据错位。 - 如果源工作表表头行数不是1行,可修改
getRange(2, 80, ...)中的2为对应起始行号。
内容的提问来源于stack exchange,提问作者Emil
相关产品推荐
相关产品推荐

