如何在Google Sheets中根据单元格值变更实现行的删除与迁移?
解决任务自动转移的方案
实现逻辑
通过Google Apps Script的onEdit触发事件,专门监听Tasks标签页的状态列变化,一旦状态改为「已完成」,就按两个表的列对应关系提取数据,转移到Completed Tasks表后删除原行。
具体代码步骤
- 打开你的表格,点击顶部菜单「扩展程序」→「Apps脚本」
- 清空默认的代码,粘贴下面的脚本:
function onEdit(e) { const spreadsheet = e.source; const tasksSheet = spreadsheet.getActiveSheet(); const completedSheet = spreadsheet.getSheetByName("Completed Tasks"); // 只处理Tasks表的状态列修改(假设状态在第4列,自己根据实际列数调整) if (tasksSheet.getName() !== "Tasks" || e.range.getColumn() !== 4) return; const taskStatus = e.value; if (taskStatus !== "已完成") return; const targetRow = e.range.getRow(); // 这里要根据你两个表的列对应关系改!比如Tasks表A列是优先级,B列是任务名,Completed表要把任务名放A,优先级放B const taskPriority = tasksSheet.getRange(targetRow, 1).getValue(); const taskTitle = tasksSheet.getRange(targetRow, 2).getValue(); const finishTime = new Date(); // 把数据追加到Completed Tasks表的最后一行 completedSheet.appendRow([taskTitle, taskPriority, finishTime]); // 删除Tasks表中已完成的这一行 tasksSheet.deleteRow(targetRow); }
关键调整点
- 列位置匹配:你必须根据自己两个表的实际列布局,修改脚本里
getRange(targetRow, X)中的X值,确保提取的数据对应到Completed Tasks表的正确列 - 测试验证:先手动复制一行测试任务,把状态改成「已完成」,确认数据能正确转移再正式用
- 权限授权:首次运行脚本会弹出权限请求,按步骤允许即可
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

