You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Google Script按标题匹配汇总同模板多副本Google Sheets数据?

批量汇总同模板Google Sheets数据的实现方案

这需求太实用了!用Google Script完全可以高效搞定,核心就是通过标题匹配自动筛选目标表格,再批量拉取数据合并到汇总表。下面是具体的实现步骤和代码:

步骤1:准备汇总表格

先建一个新的Google Sheets作为汇总表(比如叫「人员信息对比汇总」),表头要和你的模板表格完全一致,建议额外加一列「来源表格名称」,方便后续追踪每条数据的出处。

步骤2:编写Google Script代码

打开汇总表的脚本编辑器(菜单栏「扩展程序」→「Apps Script」),替换默认代码为以下内容:

function batchAggregateData() {
  // 1. 自定义配置参数
  const summarySheetName = "Sheet1"; // 汇总表的工作表名称(默认是Sheet1,按需修改)
  const titlePattern = /人员信息表-.*$/; // 匹配目标表格标题的正则,比如所有以「人员信息表-」开头的表格
  const skipHeaderRows = 1; // 模板表格的表头行数,一般是1,读取时跳过避免重复
  
  // 2. 获取汇总表对象
  const summarySpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const summarySheet = summarySpreadsheet.getSheetByName(summarySheetName);
  if (!summarySheet) {
    SpreadsheetApp.getUi().alert(`找不到名为${summarySheetName}的工作表,请检查名称!`);
    return;
  }
  
  // 3. 搜索Drive中符合标题规则的Google Sheets
  const files = DriveApp.searchFiles(
    `mimeType='application/vnd.google-apps.spreadsheet' and title matches '${titlePattern.source}'`
  );
  
  // 4. 遍历表格并导入数据
  let totalRowsAdded = 0;
  while (files.hasNext()) {
    const file = files.next();
    try {
      // 打开目标表格
      const targetSpreadsheet = SpreadsheetApp.open(file);
      const targetSheet = targetSpreadsheet.getSheets()[0]; // 默认取第一个工作表,可按需修改
      
      // 提取数据(跳过表头)
      const allData = targetSheet.getDataRange().getValues();
      const dataToAppend = allData.slice(skipHeaderRows); // 跳过表头行
      
      if (dataToAppend.length === 0) {
        console.log(`表格「${file.getName()}」无有效数据`);
        continue;
      }
      
      // 给每行数据加上来源表格名称
      dataToAppend.forEach(row => row.push(file.getName()));
      
      // 写入汇总表
      summarySheet.getRange(summarySheet.getLastRow() + 1, 1, dataToAppend.length, dataToAppend[0].length)
                  .setValues(dataToAppend);
      
      totalRowsAdded += dataToAppend.length;
      console.log(`成功导入「${file.getName()}」的${dataToAppend.length}行数据`);
      
    } catch (e) {
      console.error(`处理「${file.getName()}」出错:${e.message}`);
      SpreadsheetApp.getUi().alert(`处理「${file.getName()}」时出错:${e.message}`);
    }
  }
  
  // 完成提示
  SpreadsheetApp.getUi().alert(`批量汇总完成!共导入${totalRowsAdded}行数据`);
}

代码关键说明:

  • 标题匹配:用DriveApp.searchFiles结合正则表达式筛选表格,你可以根据实际标题修改titlePattern(比如标题包含「人员信息」就改成/人员信息/)。
  • 数据处理:自动跳过模板的表头行,避免汇总表重复出现表头;同时给每行数据加上来源表格名称,方便后续对比分析。
  • 错误处理:捕获权限不足或表格异常的情况,给出提示,避免脚本中途崩溃。

步骤3:运行并授权脚本

  1. 点击脚本编辑器的运行按钮(▶️),首次运行会要求授权,按照提示完成权限验证(需要允许脚本访问你的Drive和Sheets)。
  2. 运行完成后,回到汇总表就能看到所有匹配表格的数据已经合并进来了。

进阶优化建议

  • 定时自动更新:如果需要定期汇总,可在脚本编辑器左侧点击「触发器」,设置每天/每周自动运行脚本。
  • 指定文件夹范围:如果目标表格都在同一个文件夹,可修改搜索条件加上and '文件夹ID' in parents,缩小搜索范围提升效率。
  • 数据去重:若担心重复导入,可在汇总表加唯一标识列(比如人员ID),导入前先检查是否已存在该数据。

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

火山引擎 最新活动