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的参数)
使用步骤:
- 打开你的Google表格,点击顶部菜单栏「扩展程序」→「Apps 脚本」
- 将上述代码粘贴到脚本编辑器中,保存并命名项目
- 返回表格编辑Sheet1,脚本会自动触发同步操作
内容的提问来源于stack exchange,提问作者ArBaldryan
相关产品推荐
相关产品推荐

