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

如何基于公共字段合并多个Google Sheet列实现汇总表自动更新

Google Sheets多表内连接汇总最优方案

方案一:原生公式方案(适合数据量<1000行,零代码开箱即用)

核心采用内连接逻辑保证仅同步所有源表都存在的ID数据,自动去重重复字段,实时自动更新。

前置准备

确认所有源表的共同连接键(如邮箱ID)均为同一列,表头统一在第1行,以下示例用3张源表:表1「用户反馈表」、表2「用户信息表」、表3「员工绩效表」,可根据实际表数量直接扩展规则。

实现步骤

  • 提取符合条件的唯一ID
    在汇总表A2单元格输入公式,自动筛选出所有源表都存在的ID,源表新增符合条件的ID会自动同步:
=UNIQUE(FILTER('用户反馈表'!A:A, 
COUNTIF('用户信息表'!A:A, '用户反馈表'!A:A)>0,
COUNTIF('员工绩效表'!A:A, '用户反馈表'!A:A)>0))
  • 生成去重汇总表头
    在汇总表A1单元格输入公式,自动拼接所有源表字段,重复字段(如连接键邮箱)仅保留1次:
=UNIQUE({'用户反馈表'!1:1,'用户信息表'!1:1,'员工绩效表'!1:1})
  • 匹配全字段数据
    在汇总表B2单元格输入数组公式,自动匹配每个ID对应的所有维度数据:
=ARRAYFORMULA(IF(A2:A="",,
HSTACK(
XLOOKUP(A2:A,'用户反馈表'!A:A,'用户反馈表'!B:Z,""),
XLOOKUP(A2:A,'用户信息表'!A:A,FILTER('用户信息表'!B:Z,NOT(COUNTIF('用户反馈表'!1:1,'用户信息表'!1:1))),""),
XLOOKUP(A2:A,'员工绩效表'!A:A,FILTER('员工绩效表'!B:Z,NOT(COUNTIF({'用户反馈表'!1:1,'用户信息表'!1:1},'员工绩效表'!1:1))), "")
)))

方案二:Apps Script方案(适合数据量>1000行,自定义扩展性强)

数据量大时公式容易卡顿,用脚本+触发器实现秒级自动更新,稳定性更高。

实现步骤

  • 点击汇总表顶部菜单栏「扩展程序」-「Apps Script」,删除默认代码后粘贴以下代码:
function mergeAllSheets() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  // 配置源表名称、连接键列索引(A列为0)
  const sourceSheets = ['用户反馈表','用户信息表','员工绩效表'];
  const joinKeyCol = 0;
  // 收集所有源表数据
  let allData = {};
  let allHeaders = new Set();
  sourceSheets.forEach(sheetName => {
    const sheet = ss.getSheetByName(sheetName);
    const [headers, ...rows] = sheet.getDataRange().getValues();
    // 记录所有表头
    headers.forEach(h => allHeaders.add(h));
    // 存储每行数据
    rows.forEach(row => {
      const key = row[joinKeyCol];
      if (!allData[key]) allData[key] = {};
      headers.forEach((h, idx) => {
        allData[key][h] = row[idx];
      })
    })
  });
  // 筛选所有源表都存在的ID
  const validKeys = Object.keys(allData).filter(key => {
    return sourceSheets.every(sheetName => {
      const sheet = ss.getSheetByName(sheetName);
      const keys = sheet.getRange(2, joinKeyCol+1, sheet.getLastRow()-1,1).getValues().flat();
      return keys.includes(key);
    })
  });
  // 生成输出数据
  const headerArr = Array.from(allHeaders);
  const output = [headerArr];
  validKeys.forEach(key => {
    const row = headerArr.map(h => allData[key][h] || '');
    output.push(row);
  })
  // 写入汇总表
  const targetSheet = ss.getSheetByName('汇总表');
  targetSheet.clearContents();
  targetSheet.getRange(1,1,output.length, output[0].length).setValues(output);
}
  • 点击左侧「触发器」-「添加触发器」,选择mergeAllSheets函数,触发事件选择「电子表格」-「更改」,保存后只要任意源表有修改,汇总表就会自动更新。

注意事项

  • 所有源表的连接键需保证无重复值,避免匹配异常
  • 公式方案不要手动修改汇总表的自动溢出区域内容,避免覆盖公式计算结果
  • 脚本方案可根据需求扩展校验规则、新增源表,只需修改sourceSheets配置即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:36:04