Google|Sheets 自动化:跨表格按日期的自动新建与数据同步

在日常的数据管理和多部门协同工作中,经常会遇到这样的场景:源表(表 B)会随着业务进展不断按日期新增工作表(例如每天一个新表单),而我们需要在汇总表(表 A)中自动同步这些新增的日期工作表及数据。

如果靠人工手动复制、粘贴、改名,不仅效率低下,还极易遗漏。本文将分享一个高效、稳定的自动化方案——利用 Google Apps Script (GAS) 结合定时触发器,实现表 B 新增日期表单时,表 A 自动检测并同步。

一、 核心实现思路

整个自动化方案的核心在于:

  1. 跨表调用:通过源表格的 ID 在后台安全地读取表 B 的数据结构。
  2. 正则过滤:通过正则表达式精准识别出符合日期格式(如 YYYY/MM/DD)的工作表,避免同步无关的汇总或模板工作表。
  3. 差异比对:检查目标表 A 中是否已经存在该日期的工作表。
  4. 完整复制:若表 B 存在新表,而表 A 尚未同步,则直接调用 GAS 的 copyTo 方法完整复制,保留原格式、公式与合并单元格。

二、 完整核心代码

在目标表格(表 A)中,打开 扩展程序 > Apps Script,粘贴以下代码:

function syncNewSheetsFromB() {
  // 1. 设置表格 B 的 ID
  var sourceSpreadsheetId = "1xpNZv"; 
  
  var targetSS = SpreadsheetApp.getActiveSpreadsheet();
  var sourceSS = SpreadsheetApp.openById(sourceSpreadsheetId);
  
  // 2. 获取表格 B 中所有的工作表
  var sourceSheets = sourceSS.getSheets();
  
  // 3. 遍历表格 B 的每一个表单
  sourceSheets.forEach(function(sourceSheet) {
    var sheetName = sourceSheet.getName();
    
    // 匹配日期格式的表单(如:2026/09/20,按需调整正则匹配)
    if (sheetName.match(/\d{4}\/\d{2}\/\d{2}/)) {
      
      // 判断表格 A 中是否已经存在同名表单
      var existingSheet = targetSS.getSheetByName(sheetName);
      
      // 【只有当 B 有新表单,而 A 没有时】才执行同步
      if (!existingSheet) {
        
        // 直接将 B 中的新工作表完整复制到 A 中(保留所有合并单元格和格式)
        var copiedSheet = sourceSheet.copyTo(targetSS);
        
        // 将复制过来的表单重命名为对应日期
        copiedSheet.setName(sheetName);
        
        Logger.log("成功同步新表单: " + sheetName);
      }
    }
  });
}

三、 如何设置后台定时自动运行?

为了让同步过程完全自动化,只需在 Google Apps Script 中配置一个基于时间的触发器(Time-driven Trigger):

  1. 在 Apps Script 编辑器左侧菜单栏中,点击 闹钟图标(Triggers / 触发器)。
  2. 点击右下角的 + 添加触发器 按钮。
  3. 在弹出的窗口中进行如下参数配置:
    • 选择要运行的函数:syncNewSheetsFromB
    • 选择事件源:时间驱动 (Time-driven)
    • 选择基于时间的触发器类型:定时器 (Day timer)(按天触发)
    • 选择时间段:例如选择 下午 5 点至 6 点(可根据团队下班或数据更新的高峰期灵活调整)。
  4. 点击 保存,并根据提示完成 Google 账号的安全授权。

完成上述设置后,表格就会在每天设定的时间段内,在后台自动完成新日期工作表的检测与同步。