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

如何用Google Apps Script合并不同列名的实质相同数据列?

实现方案

核心思路

先定义列名映射规则(把不同团队的同义列名对应到中央表的统一列名),然后遍历各团队表格,根据映射提取对应列的数据,最后汇总到中央追踪表。

具体代码示例

假设你的Google Sheets里有:

  • 中央表:命名为中央追踪表,统一列名为项目名称
  • 甲团队表:命名为甲团队表,列名project name
  • 乙团队表:命名为乙团队表,列名Initiative Name

以下是可直接复用的脚本:

function mergeSameColumns() {
  // 获取当前Spreadsheet实例
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  
  // 定义列名映射:key是中央表列名,value是各团队表的对应列名数组
  const columnMap = {
    '项目名称': ['project name', 'Initiative Name'] // 可继续添加其他同义列名
  };
  
  // 获取中央表并处理表头与旧数据
  const centralSheet = ss.getSheetByName('中央追踪表');
  if (!centralSheet) {
    // 中央表不存在则新建并写入表头
    centralSheet = ss.insertSheet('中央追踪表');
    centralSheet.getRange(1, 1, 1, Object.keys(columnMap).length).setValues([Object.keys(columnMap)]);
  } else {
    // 清空表头以外的旧数据
    centralSheet.getRange(2, 1, centralSheet.getLastRow() - 1, centralSheet.getLastColumn()).clearContent();
  }
  
  // 定义需要处理的团队表名称列表
  const teamSheetNames = ['甲团队表', '乙团队表']; // 可添加更多团队表
  
  // 遍历每个团队表提取数据
  let mergedData = [];
  teamSheetNames.forEach(sheetName => {
    const teamSheet = ss.getSheetByName(sheetName);
    if (!teamSheet) return; // 表不存在则跳过
    
    // 获取该表的表头行
    const headers = teamSheet.getRange(1, 1, 1, teamSheet.getLastColumn()).getValues()[0];
    
    // 匹配对应列并提取数据
    Object.keys(columnMap).forEach(centralColName => {
      const matchedIndex = headers.findIndex(header => 
        columnMap[centralColName].includes(header.trim().toLowerCase())
      );
      if (matchedIndex !== -1) {
        const colData = teamSheet.getRange(2, matchedIndex + 1, teamSheet.getLastRow() - 1, 1).getValues();
        colData.forEach((cell, idx) => {
          if (!mergedData[idx]) mergedData[idx] = [];
          mergedData[idx].push(cell[0]);
        });
      } else {
        // 未找到对应列时填充空值
        for (let i = 0; i < teamSheet.getLastRow() - 1; i++) {
          if (!mergedData[i]) mergedData[i] = [];
          mergedData[i].push('');
        }
      }
    });
  });
  
  // 将合并后的数据写入中央表
  if (mergedData.length > 0) {
    centralSheet.getRange(2, 1, mergedData.length, mergedData[0].length).setValues(mergedData);
  }
  
  SpreadsheetApp.getUi().alert('数据合并完成!');
}

使用说明

  1. 打开目标Google Sheets,点击顶部菜单扩展程序 > Apps 脚本
  2. 把上述代码粘贴到脚本编辑器,替换默认代码
  3. 根据实际表格名称、列名,修改columnMap和teamSheetNames的内容
  4. 点击工具栏运行按钮,首次运行按提示完成授权即可

注意事项

  • 列名匹配支持大小写忽略+去空格,比如Project Name和project name会被识别为同一列
  • 若某团队表无对应列,会自动填充空值,不破坏整体数据结构
  • 如需合并多字段(如项目名称+负责人+进度),只需在columnMap中添加对应映射,示例:
    const columnMap = {
      '项目名称': ['project name', 'Initiative Name'],
      '负责人': ['Owner', '负责人', '对接人'],
      '进度': ['Progress', '完成百分比']
    };
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:05:33