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

求助:用Google Apps Script合并多工作表至主表,A列存工作表名

解决方案:自动合并多工作表数据(含来源表名+仅取前6条)

方法1:使用动态公式(无需手动填写工作表名)

结合QUERY、MAP、TOCOL等函数,可自动遍历所有工作表,提取前6条数据并添加来源表名:

在目标主工作表(如新建的「主表」)的A1单元格输入以下公式:

=LET(
  sheets, FILTER(GET_WORKBOOK_NAMES(), NOT(REGEXMATCH(GET_WORKBOOK_NAMES(), "主表|Keyword Sheet"))),
  data, MAP(sheets, LAMBDA(s, HSTACK(REPT(s, 6), INDIRECT("'"&s&"'!A1:F6")))),
  TOCOL(data, 1)
)

公式说明:

  • GET_WORKBOOK_NAMES():获取当前文档所有工作表名称
  • FILTER(...):排除无需合并的工作表(这里排除「主表」和「Keyword Sheet」,可按需修改)
  • MAP(sheets, LAMBDA(...)):遍历每个工作表,用HSTACK将来源表名重复6次(对应前6条数据)与该表A1:F6区域合并
  • TOCOL(data, 1):将所有合并数据转为单列堆叠格式,自动忽略空值

若你的工作表数据起始位置或列数不同,可修改INDIRECT("'"&s&"'!A1:F6")中的单元格范围。

方法2:使用Google Apps Script(灵活可控)

如果公式无法满足复杂需求(如跳过表头、处理特殊格式),可采用脚本实现:

  1. 打开Google Sheets,点击「扩展程序」→「Apps Script」
  2. 删除默认代码,粘贴以下脚本:
function mergeSheets() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const mainSheet = ss.getSheetByName("主表"); // 主表名称,按需修改
  const excludeSheets = ["主表", "Keyword Sheet"]; // 排除的工作表,按需修改
  
  // 清空主表现有数据(如需保留表头,可注释此行)
  mainSheet.clearContents();
  
  let rowIndex = 1;
  // 遍历所有工作表
  ss.getSheets().forEach(sheet => {
    const sheetName = sheet.getName();
    if (excludeSheets.includes(sheetName)) return;
    
    // 获取前6条数据(A列到F列,可修改范围)
    const data = sheet.getRange(1, 1, 6, 6).getValues();
    
    // 给每条数据添加来源表名
    const dataWithSheetName = data.map(row => [sheetName, ...row]);
    
    // 写入主表
    mainSheet.getRange(rowIndex, 1, dataWithSheetName.length, dataWithSheetName[0].length).setValues(dataWithSheetName);
    rowIndex += dataWithSheetName.length;
  });
}
  1. 保存脚本,点击运行,完成授权后即可执行合并。

脚本说明:

  • 修改excludeSheets数组可调整需排除的工作表
  • getRange(1, 1, 6, 6)表示从第1行第1列开始取6行6列数据,可按需调整行列数
  • 若需保留主表表头,可注释mainSheet.clearContents();并将rowIndex设为2

内容的提问来源于stack exchange,提问作者kueteo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:14