如何用Apps Script将多个源工作表非空行复制到Mastersheet总表
Google Apps Script多源表汇总到Mastersheet实现方案
实现逻辑
- 预先配置所有源工作表的所属文件ID与表名,批量遍历处理
- 逐表提取非空行数据,统一存入汇总数组后一次性写入目标总表,减少IO操作提升运行速度
- 保留原有跳过表头、过滤空行的逻辑,与你之前使用的单表脚本逻辑保持一致
配置说明
你需要修改脚本中以下2处配置信息:
SOURCE_SHEET_CONFIG:数组内每个对象对应一张源工作表,依次填入所有20张源表的文件ID、表名即可TARGET_SPREADSHEET_ID:Mastersheet所在的Google表格文件ID
- 特殊情况:如果所有源表和Mastersheet都在同一个Google表格文件中,可以省略所有ID配置,直接调用
SpreadsheetApp.getActiveSpreadsheet()获取文件实例即可
可用脚本
function batchCopyToMastersheet() { // --- 以下为需要你修改的配置项 --- // 所有源工作表配置:每个元素对应一张源表,id为源表所在表格文件的ID,name为源工作表名称 const SOURCE_SHEET_CONFIG = [ {id: "源表1所在文件ID", name: "源表1表名"}, {id: "源表2所在文件ID", name: "源表2表名"}, // 继续补充剩下18张源表的配置即可 ]; // 目标总表Mastersheet所在的表格文件ID const TARGET_SPREADSHEET_ID = "目标文件ID"; // --- 配置项结束 --- let allValidRows = []; // 遍历所有源表提取有效数据 SOURCE_SHEET_CONFIG.forEach(sourceConfig => { const sourceFile = SpreadsheetApp.openById(sourceConfig.id); const sourceSheet = sourceFile.getSheetByName(sourceConfig.name); const sourceRange = sourceSheet.getDataRange(); const [header, ...sourceRows] = sourceRange.getValues(); // 过滤空行 const validRows = sourceRows.filter(row => row.join(" ").trim() !== ""); // 仅第一张源表保留表头,其他表跳过表头避免重复 if (allValidRows.length === 0) { allValidRows.push(header, ...validRows); } else { allValidRows.push(...validRows); } }); // 写入目标Mastersheet const targetFile = SpreadsheetApp.openById(TARGET_SPREADSHEET_ID); const targetSheet = targetFile.getSheetByName("Mastersheet"); // 清空目标表原有内容(不需要清空的话可以删除下面这行) targetSheet.clearContents(); // 写入汇总数据 targetSheet.getRange(1, 1, allValidRows.length, allValidRows[0].length).setValues(allValidRows); }
追加模式修改说明
如果不需要每次汇总都清空Mastersheet原有内容,仅追加新数据,可以删除targetSheet.clearContents()这行,同时把最后写入的起始行改为targetSheet.getLastRow() + 1即可,修改后的写入逻辑如下:
// 仅追加新数据的写入逻辑 const targetFile = SpreadsheetApp.openById(TARGET_SPREADSHEET_ID); const targetSheet = targetFile.getSheetByName("Mastersheet"); const startRow = targetSheet.getLastRow() + 1; targetSheet.getRange(startRow, 1, allValidRows.length, allValidRows[0].length).setValues(allValidRows);
内容的提问来源于stack exchange,提问作者Bob Hardball
相关产品推荐
相关产品推荐

