如何在Google Sheets中按条件自动将数据同步到Master工作表
Google Sheets多表符合条件数据自动同步到Master表方案
下面提供两种可直接落地的实现方案,可根据你的实际需求选择:
方案1:QUERY+FILTER组合公式(无代码,零门槛)
适用场景:子表列结构统一、不需要复杂自定义逻辑,需要实时同步的情况
- 首先确认其余三个工作表的列结构完全一致,Grade列、Follow Up复选框列的位置在三个子表中完全相同,所有子表第1行为表头,数据从第2行开始。
- 打开Master工作表,保留表头,清空表头下的所有内容,在A2单元格输入对应公式即可自动完成同步,示例公式如下(根据你的实际列位置、表名修改参数即可):
=QUERY( { FILTER(Sheet1!A2:Z, (Sheet1!B2:B="Negative")+(Sheet1!E2:E=TRUE)); FILTER(Sheet2!A2:Z, (Sheet2!B2:B="Negative")+(Sheet2!E2:E=TRUE)); FILTER(Sheet3!A2:Z, (Sheet3!B2:B="Negative")+(Sheet3!E2:E=TRUE)) }, "WHERE Col1 IS NOT NULL", 0 )
- 参数说明:
A2:Z修改为你实际需要同步的列范围,B替换为Grade列对应的列号,E替换为Follow Up复选框列对应的列号,Sheet1/Sheet2/Sheet3替换为你另外三个工作表的实际名称,公式中的+代表逻辑或,两个条件满足任意一项就会被筛选。 - 配置完成后子表新增的符合条件的数据会实时同步到Master表,无需手动操作。
方案2:Google Apps Script(自定义程度高,适配复杂场景)
适用场景:子表列结构有差异、需要额外处理逻辑(比如加来源表标记、去重)、数据量较大的情况
- 打开你的表格,点击顶部菜单栏「扩展程序」-「Apps Script」,删除编辑器中默认的代码,粘贴以下代码:
function syncToMaster() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const masterSheet = ss.getSheetByName("Master"); // 替换为你实际的三个源工作表名称 const sourceSheets = ["表1", "表2", "表3"]; // 替换为对应参数:表头行号、Grade列序号(A=1,B=2以此类推)、Follow Up列序号 const headerRow = 1; const gradeCol = 2; const followUpCol = 5; const resultData = []; // 保留Master表原有表头 resultData.push(masterSheet.getRange(headerRow, 1, 1, masterSheet.getLastColumn()).getValues()[0]); // 遍历所有源表筛选符合条件的数据 sourceSheets.forEach(sheetName => { const sheet = ss.getSheetByName(sheetName); const rows = sheet.getDataRange().getValues(); for (let i = headerRow; i < rows.length; i++) { const row = rows[i]; if (row[gradeCol - 1] === "Negative" || row[followUpCol - 1] === true) { resultData.push(row); } } }); // 写入数据到Master表 masterSheet.clearContents(); masterSheet.getRange(1, 1, resultData.length, resultData[0].length).setValues(resultData); }
- 保存项目并按提示授权脚本访问表格的权限,可通过两种方式触发同步:
- 手动触发:直接在Apps Script编辑器点击运行按钮,也可以在表格中插入自定义按钮关联该函数,点击即可同步
- 自动触发:在Apps Script左侧点击「触发器」-「添加触发器」,选择
syncToMaster函数,触发事件来源选「电子表格」,事件类型选「更改」,保存后只要表格内有内容修改就会自动同步数据
内容的提问来源于stack exchange,提问作者wizkids121
相关产品推荐
相关产品推荐

