如何用Google Apps Script将源表符合条件的指定列数据复制到目标表
Google Apps Script 实现源表数据筛选同步到目标表
核心逻辑
- 读取源表所有数据,跳过表头行
- 逐行检查状态列(G列)是否为
yes - 提取符合条件行的姓名、性别、薪资数据,按目标表结构组装(若目标表含电话、邮箱列则补充
-) - 批量将符合条件的数据追加到目标表的最后一行
完整代码
function syncDataToTargetSheet() { // 获取当前打开的电子表格 const ss = SpreadsheetApp.getActiveSpreadsheet(); // 替换为你的源表和目标表实际名称 const sourceSheet = ss.getSheetByName("源表"); const targetSheet = ss.getSheetByName("目标表"); // 检查表是否存在 if (!sourceSheet || !targetSheet) { SpreadsheetApp.getUi().alert("请确认源表或目标表的名称是否正确!"); return; } // 获取源表数据,跳过表头(第1行) const sourceData = sourceSheet.getDataRange().getValues().slice(1); // 存储需要同步的数据 const dataToSync = []; // 遍历源表每一行 sourceData.forEach(row => { const status = row[6]; // G列对应数组索引6(数组从0开始计数) if (status === "yes") { const name = row[1]; // B列:姓名 const gender = row[2]; // C列:性别 const salary = row[5]; // F列:薪资 // 按你的预期输出结构组装数据(姓名、性别、电话、邮箱、薪资) dataToSync.push([name, gender, "-", "-", salary]); // 如果目标表实际只有姓名、性别、薪资三列,替换成下面这行: // dataToSync.push([name, gender, salary]); } }); // 没有符合条件的数据时提示 if (dataToSync.length === 0) { SpreadsheetApp.getUi().alert("没有状态为yes的数据需要同步!"); return; } // 获取目标表下一个可写入的行号 const targetStartRow = targetSheet.getLastRow() + 1; // 批量写入数据到目标表 targetSheet.getRange(targetStartRow, 1, dataToSync.length, dataToSync[0].length).setValues(dataToSync); SpreadsheetApp.getUi().alert("数据同步完成!"); }
代码说明
getSheetByName("表名"):必须替换成你实际的源表和目标表名称,否则会报错- 数组索引:Google表格的列从A开始对应数组索引0,比如G列是第7列,所以索引为6
- 批量写入:
setValues()比逐行写入效率高很多,适合处理大量数据 - 两种组装逻辑:注释部分对应你描述的目标表结构(三列),未注释部分对应你给出的预期输出结构(五列),按需选择
使用步骤
- 打开你的Google表格
- 点击顶部菜单栏「扩展程序」→「Apps Script」
- 删除编辑器里的默认代码,粘贴上述代码
- 修改代码中的
"源表"和"目标表"为你实际的工作表名称 - 点击编辑器顶部的保存按钮,给项目起个名字(比如「数据同步工具」)
- 点击运行按钮,首次运行需要授权,按照页面提示完成授权即可
内容的提问来源于stack exchange,提问作者SK360 Kiry
相关产品推荐
相关产品推荐

