Google Sheets onEdit函数未触发及相关问题咨询
问题解答
背景
我使用复选框标记脚本执行状态,禁止用户手动修改这些复选框。最初编写的onEdit函数本应弹出警告,但始终无法触发——即使创建了On Edit触发器且显示最近运行记录也无效(复选框位于Rules工作表的C列)。修正后函数正常运行,但目前有两个问题:
- 无法找到关闭邮件提醒的方法
- 若他人将表格保存到自己的Google Drive,邮件提醒会发送给他们还是原表格的我?
初始代码
function onEdit(e) { const r = e.Range; Logger.log(r.getName); if (r.getSheet().getSheetName() == "Rules") { if (r.Column == 3) { Browser.msgBox("Do not alter the check boxes manually, click the icon in the Implement column"); } } }
修正后代码
function onEdit(e) { const r = e.range; if (r.getSheet().getSheetName() == "Rules") { if (r.getColumn() == 3 && r.getRow() > 1) { r.setValue(!r.getValue()); Browser.msgBox("Do not alter the check boxes manually, click the triangle in the Implement column"); } } }
解答
1. 关闭邮件提醒
你提供的修正后代码仅包含Browser.msgBox弹窗警告,无邮件发送逻辑。针对不同场景的关闭方式:
- Google Sheets自带邮件通知:点击表格右上角的铃铛图标(通知设置),在面板中找到对应邮件通知规则,直接删除或关闭。
- 脚本内置邮件发送:若脚本中存在未贴出的
MailApp.sendEmail或GmailApp.sendEmail代码,找到对应语句并注释/删除即可。示例:// 注释掉邮件发送代码 // MailApp.sendEmail("xxx@example.com", "主题", "内容");
2. 副本表格的邮件提醒归属
当他人将表格保存到自己的Drive时,会生成一个完全独立的副本:
- 副本内的脚本将以副本所有者的身份运行
- 若脚本包含邮件发送逻辑,邮件会发送给副本的所有者(即保存表格的人),而非原表格的你
补充:初始函数失效原因
初始代码的语法错误导致逻辑无法触发:
- 使用了
e.Range(首字母大写),正确应为e.range - 使用了
r.Column(首字母大写),正确方法是r.getColumn()
内容的提问来源于stack exchange,提问作者PhilHibbs
相关产品推荐
相关产品推荐

