Google Apps Script无法获取编辑器邮箱问题求助
解决Google Apps Script中Session.getActiveUser().getEmail()无返回值的问题
问题原因
- 简单触发器权限限制:默认的
onEdit简单触发器以匿名身份运行,没有权限调用Session.getActiveUser()获取用户邮箱,导致返回空值。 - 匿名访问场景:如果编辑者未登录Google账号访问表格,
Session.getActiveUser()也无法返回有效邮箱。
解决方案
使用事件对象的用户属性
触发器的事件参数e中包含e.user对象,调用e.user.getEmail()可直接获取编辑者的邮箱地址,该方法在可安装触发器中拥有足够权限。切换为可安装触发器
删除自动创建的简单onEdit触发器,手动创建可安装触发器:- 打开Apps Script编辑器,点击左侧「触发器」图标
- 点击「添加触发器」,选择函数
LimitPakYoga - 事件类型选择「从电子表格」→「编辑时」,保存即可
修改代码适配新逻辑
替换原有的邮箱获取方式,并增加匿名用户的拦截处理:
function LimitPakYoga(e) { var allowedEmails = ["suryaprayoga.business@gmail.com", "antonioryan2101@gmail.com"]; var sheet = e.source.getActiveSheet(); var range = e.range; // 从事件对象中获取编辑者邮箱,兼容匿名情况 var editorEmail = e.user ? e.user.getEmail() : ""; console.log("Event Object: " + JSON.stringify(e)); console.log("Editor's Email: " + editorEmail); console.log("Allowed Emails: " + allowedEmails); if (sheet.getName() === "Daily_S3") { // 拦截匿名用户或未授权用户 if (!editorEmail || allowedEmails.indexOf(editorEmail) === -1) { range.setValue(e.oldValue); SpreadsheetApp.getUi().alert("You are not allowed to edit this column."); } } }
注意事项
- 首次运行可安装触发器时,需要完成授权流程,允许脚本访问用户身份信息。
- 确保表格分享设置中,禁止匿名编辑,避免无法识别用户身份的情况。
内容的提问来源于stack exchange,提问作者Ryan Antonio
相关产品推荐
相关产品推荐

