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

如何用Apps Script将多个源工作表非空行复制到Mastersheet总表

Google Apps Script多源表汇总到Mastersheet实现方案

实现逻辑

  • 预先配置所有源工作表的所属文件ID与表名,批量遍历处理
  • 逐表提取非空行数据,统一存入汇总数组后一次性写入目标总表,减少IO操作提升运行速度
  • 保留原有跳过表头、过滤空行的逻辑,与你之前使用的单表脚本逻辑保持一致

配置说明

你需要修改脚本中以下2处配置信息:

  1. SOURCE_SHEET_CONFIG:数组内每个对象对应一张源工作表,依次填入所有20张源表的文件ID、表名即可
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:03