Google Sheets主表批量同步至分校表并按校区名过滤需求
Google Sheets 分校数据自动同步方案
核心逻辑
替换低效的importrange手动配置,通过Google Apps Script实现主表更新时,自动筛选第三列匹配分校名称的记录,同步到对应分校副本。
分步实现
1. 分校副本前置设置
在每个分校副本的固定位置(比如A1单元格)写入自身校区名称,脚本会以此作为匹配条件。
2. 主工作簿脚本代码
将以下代码粘贴到主工作簿的脚本编辑器中(工具 > 脚本编辑器):
function syncCampusData() { // 主工作簿基础配置 const mainSpreadsheetId = "你的主工作簿ID"; const mainSheet = SpreadsheetApp.openById(mainSpreadsheetId).getSheetByName("independent data"); const allData = mainSheet.getDataRange().getValues(); const headerRow = allData[0]; const dataRows = allData.slice(1); // 校区-副本映射:key是校区名称,value是对应分校工作簿ID const campusMap = { "XX校区": "分校工作簿ID1", "YY校区": "分校工作簿ID2", // 新增校区直接在这里追加 }; // 遍历同步每个分校数据 for (const [campusName, targetId] of Object.entries(campusMap)) { try { const targetSheet = SpreadsheetApp.openById(targetId).getSheetByName("数据接收标签页"); // 替换成分校的目标标签页名 // 筛选第三列(数组索引为2)匹配当前校区的行 const matchedRows = dataRows.filter(row => row[2] === campusName); // 清空目标表旧数据(保留表头) if (targetSheet.getLastRow() > 1) { targetSheet.getRange(2, 1, targetSheet.getLastRow() - 1, targetSheet.getLastColumn()).clearContent(); } // 写入筛选后的数据 if (matchedRows.length > 0) { targetSheet.getRange(2, 1, matchedRows.length, matchedRows[0].length).setValues(matchedRows); } } catch (err) { console.error(`同步${campusName}失败: ${err.message}`); } } } // 创建自动触发:主表编辑时同步 function setupAutoTrigger() { const mainSS = SpreadsheetApp.openById("你的主工作簿ID"); ScriptApp.newTrigger("syncCampusData") .forSpreadsheet(mainSS) .onEdit() .create(); }
3. 权限与触发配置
- 首次运行
setupAutoTrigger,按提示完成权限授权(需允许脚本访问Google Sheets) - 确保主工作簿和所有分校副本已共享给脚本运行账号(或设置为组织内可编辑)
优化建议
- 若校区数量频繁增加,可把
campusMap的配置移到主工作簿的单独标签页,脚本动态读取该标签页的映射数据,无需每次修改代码 - 若无需实时同步,可将触发器改为定时触发(比如每日凌晨执行),降低资源占用
内容的提问来源于stack exchange,提问作者Iselee Hill
相关产品推荐
相关产品推荐

