You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google表格onEdit脚本实现:Sheet1编辑时Sheet2替换/追加行

Google Sheets onEdit 脚本实现Sheet1到Sheet2的同步更新

以下是满足需求的Google Apps Script代码,直接复制到你的表格脚本编辑器中即可使用:

function onEdit(e) {
  // 仅响应表格编辑触发,手动运行会报错
  if (!e) throw new Error("请通过编辑表格触发此脚本,不要手动运行");
  
  const sourceSheet = e.source.getSheetByName("Sheet1");
  const targetSheet = e.source.getSheetByName("Sheet2");
  
  // 只处理Sheet1的编辑操作
  if (sourceSheet.getName() !== e.range.getSheet().getName()) return;
  
  const editedRow = e.range.getRow();
  // 跳过表头行(假设表头在第1行,若你的表头行不同请修改此处判断)
  if (editedRow === 1) return;
  
  // 获取当前编辑行的A、C、D列数据
  const sourceData = sourceSheet.getRange(editedRow, 1, 1, 4).getValues()[0];
  const [colA, , colC, colD] = sourceData;
  
  // 在Sheet2中查找A列匹配的行
  const textFinder = targetSheet.createTextFinder(colA).matchEntireCell(true).findNext();
  const matchRow = textFinder ? textFinder.getRow() : -1;
  
  // 根据匹配结果执行更新或追加操作
  if (matchRow !== -1) {
    // 找到匹配行,更新对应C、D列数据
    targetSheet.getRange(matchRow, 3).setValue(colC);
    targetSheet.getRange(matchRow, 4).setValue(colD);
  } else {
    // 无匹配行,在Sheet2末尾追加新行
    targetSheet.appendRow([colA, "", colC, colD]);
  }
}

关键逻辑说明:

  • 仅对Sheet1的编辑事件做出响应,其他工作表的操作不会触发脚本
  • 默认跳过第1行表头,若你的表头在其他行,修改editedRow === 1的判断值即可
  • 以A列内容作为唯一匹配标识,使用TextFinder高效查找Sheet2中的对应行(数据量大时比循环遍历性能更好)
  • 找到匹配行时仅更新C、D列;未找到匹配行则追加包含A、C、D列数据的新行(B列留空,若需要同步B列可修改appendRow的参数)

使用步骤:

  1. 打开你的Google表格,点击顶部菜单栏「扩展程序」→「Apps 脚本」
  2. 将上述代码粘贴到脚本编辑器中,保存并命名项目
  3. 返回表格编辑Sheet1,脚本会自动触发同步操作

内容的提问来源于stack exchange,提问作者ArBaldryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 00:15:59