如何修改onEdit触发脚本实现按单元格值将行移动至对应工作表
解决方案
你可以直接用动态读取单元格值作为目标工作表名的逻辑替换原有硬编码的判断,不需要为每个调查员单独写判断分支,修改后代码如下:
function onEdit(event){ // 源工作表名、触发编辑的列(B列对应序号2)可根据实际情况调整 const SOURCE_SHEET_NAME = "Pending assignment"; const TRIGGER_COLUMN = 2; var ss = SpreadsheetApp.getActiveSpreadsheet(); var s = event.source.getActiveSheet(); var r = event.source.getActiveRange(); // 仅当编辑的是源表的指定列时触发后续逻辑 if(s.getName() == SOURCE_SHEET_NAME && r.getColumn() == TRIGGER_COLUMN) { var investigatorName = r.getValue().trim(); // 去除前后空格避免匹配失败 var targetSheet = ss.getSheetByName(investigatorName); // 先判断对应调查员的工作表是否存在,不存在则不执行移动操作避免报错 if(targetSheet) { var row = r.getRow(); var numColumns = s.getLastColumn(); var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); s.getRange(row, 1, 1, numColumns).moveTo(target); s.deleteRow(row); } } }
注意事项
- 代码里的
SOURCE_SHEET_NAME和TRIGGER_COLUMN可以根据你实际的源表名称、触发编辑的列序号调整 - 下拉选项的调查员姓名必须和对应工作表名称完全一致,包括空格、大小写,否则会匹配失败
- 如果需要设置白名单仅允许部分姓名触发移动,可以在判断
targetSheet的逻辑前再加一层白名单校验,比如定义const ALLOWED_NAMES = ["张三","李四","王五"],再补充&& ALLOWED_NAMES.includes(investigatorName)的判断即可
内容的提问来源于stack exchange,提问作者Dino
相关产品推荐
相关产品推荐

