在日常的数据管理和多部门协同工作中,经常会遇到这样的场景:源表(表 B)会随着业务进展不断按日期新增工作表(例如每天一个新表单),而我们需要在汇总表(表 A)中自动同步这些新增的日期工作表及数据。
如果靠人工手动复制、粘贴、改名,不仅效率低下,还极易遗漏。本文将分享一个高效、稳定的自动化方案——利用 Google Apps Script (GAS) 结合定时触发器,实现表 B 新增日期表单时,表 A 自动检测并同步。
一、 核心实现思路
整个自动化方案的核心在于:
- 跨表调用:通过源表格的 ID 在后台安全地读取表 B 的数据结构。
- 正则过滤:通过正则表达式精准识别出符合日期格式(如
YYYY/MM/DD)的工作表,避免同步无关的汇总或模板工作表。 - 差异比对:检查目标表 A 中是否已经存在该日期的工作表。
- 完整复制:若表 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):
- 在 Apps Script 编辑器左侧菜单栏中,点击 闹钟图标(Triggers / 触发器)。
- 点击右下角的
+ 添加触发器按钮。 - 在弹出的窗口中进行如下参数配置:
- 选择要运行的函数:
syncNewSheetsFromB - 选择事件源:
时间驱动 (Time-driven) - 选择基于时间的触发器类型:
定时器 (Day timer)(按天触发) - 选择时间段:例如选择
下午 5 点至 6 点(可根据团队下班或数据更新的高峰期灵活调整)。
- 选择要运行的函数:
- 点击 保存,并根据提示完成 Google 账号的安全授权。
完成上述设置后,表格就会在每天设定的时间段内,在后台自动完成新日期工作表的检测与同步。