如何在Google Apps Script的onEdit脚本中用单元格值动态指定目标工作表
动态指定目标工作表的修改方案
以下是调整后的完整脚本,可实现根据B列取值自动匹配目标工作表:
/* 当A列复选框勾选为true时,将行数据从源表发送到对应名称的目标工作表 */ function onEdit(event) { const ui = SpreadsheetApp.getUi(); const ss = SpreadsheetApp.getActiveSpreadsheet(); // 修正:获取实际触发编辑操作的工作表,而非强制读取sheet1 const eventSheet = event.source.getActiveSheet(); const sourceSheet = ss.getSheetByName("sheet1"); const eventRange = event.source.getActiveRange(); // 仅响应sheet1中A列复选框的勾选操作 if(eventSheet.getName() === sourceSheet.getName() && eventRange.getColumn() === 1 && eventRange.getValue() === true) { const rowNum = eventRange.getRow(); const numColumns = eventSheet.getLastColumn(); // 动态读取B列值作为目标工作表名称,去除前后空格避免匹配失败 const targetSheetName = eventSheet.getRange(rowNum, 2).getValue().trim(); const targetSheet = ss.getSheetByName(targetSheetName); // 校验目标工作表是否存在 if (!targetSheet) { ui.alert(`错误:名称为【${targetSheetName}】的工作表不存在,请检查B列输入`); sourceSheet.getRange(rowNum, 1).setValue(''); return; } const row = eventSheet.getRange(rowNum, 2, 1, numColumns).getValues(); const result = ui.alert( '确认导出该学生数据?操作完成后当前行将被删除', ui.ButtonSet.YES_NO ); if (result == ui.Button.YES) { targetSheet.appendRow(row[0]); sourceSheet.deleteRow(rowNum); } else { const checkBox = sourceSheet.getRange(rowNum, 1); checkBox.setValue(''); } } }
核心调整说明
- 移除了原代码中固定写死的
targetSheet定义,改为动态获取触发行第二列(B列)的值作为目标工作表名称,自动匹配对应表 - 新增了目标工作表存在性校验逻辑,若B列填写的表名不存在会弹出提示并自动取消勾选,避免脚本运行报错
- 修正了原代码中事件工作表的获取逻辑,避免跨表编辑时触发不必要的判断
- 使用
trim()方法处理B列取值的前后空格,减少因输入时的多余空格导致的匹配失败问题
注意:请确保B列填写的工作表名称和实际存在的工作表名称完全一致(大小写、特殊字符、空格均需匹配)
内容的提问来源于stack exchange,提问作者Tim Welch
相关产品推荐
相关产品推荐

