Google Sheets编辑触发器:如何指定特定工作表并限制C列触发?
解决Google Sheets编辑触发器仅在指定工作表触发的问题
要实现仅在指定工作表的C列(columnStart=3)且单元格值为"REMOVAL"时触发脚本,你需要在初始的条件判断中加入工作表名称的校验逻辑。核心是通过事件对象e获取当前编辑操作所在的工作表名称,而非直接调用getSheetByName(后者是主动获取指定工作表,无法判断当前触发的工作表)。
修改后的完整脚本
function sendMailEdit(e){ // 替换成你需要指定的工作表名称,比如"物流计划表" const TARGET_SHEET_NAME = "你的目标工作表名称"; // 三重判断:工作表名称匹配、C列、值为REMOVAL,任一不满足就退出 if (e.range.getSheet().getName() !== TARGET_SHEET_NAME || e.range.columnStart !== 3 || e.value !== "REMOVAL") { return; } const rData = e.source.getActiveSheet().getRange(e.range.rowStart,1,1,14).getValues(); let n = rData[0][3]; let f = rData[0][1]; let d = rData[0][13]; let items = rData[0][2]; let now = new Date().toLocaleString("en-US"); let msg = "This is an auto generated message to inform you that the removal date of " + f + " for project " + n + " (" + d + ") has been added to the Logistics Schedule at " + now; Logger.log(msg); GmailApp.sendEmail("x@x.com", "Project Removal Scheduled", msg) }
关键修改说明
- 新增
TARGET_SHEET_NAME常量,替换成你实际需要触发的工作表名称 - 在初始的
if判断中,首先用e.range.getSheet().getName()获取当前编辑操作所在的工作表名称,和目标名称比对。如果不匹配,直接退出脚本,避免后续执行 - 保留原有的C列和值为"REMOVAL"的判断,三者是且的关系,只有全部满足才会继续执行邮件发送逻辑
你之前尝试失败的原因
直接调用e.source.getSheetByName()是主动获取指定工作表,但无法判断当前触发事件是否来自这个工作表。正确的逻辑应该是获取当前事件所在的工作表名称,再和目标名称做比对,这样才能过滤掉其他工作表的编辑操作。
内容的提问来源于stack exchange,提问作者Eduardo Val
相关产品推荐
相关产品推荐

