You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Apps Script无法获取编辑器邮箱问题求助

解决Google Apps Script中Session.getActiveUser().getEmail()无返回值的问题

问题原因

  • 简单触发器权限限制:默认的onEdit简单触发器以匿名身份运行,没有权限调用Session.getActiveUser()获取用户邮箱,导致返回空值。
  • 匿名访问场景:如果编辑者未登录Google账号访问表格,Session.getActiveUser()也无法返回有效邮箱。

解决方案

  1. 使用事件对象的用户属性
    触发器的事件参数e中包含e.user对象,调用e.user.getEmail()可直接获取编辑者的邮箱地址,该方法在可安装触发器中拥有足够权限。

  2. 切换为可安装触发器
    删除自动创建的简单onEdit触发器,手动创建可安装触发器:

    • 打开Apps Script编辑器,点击左侧「触发器」图标
    • 点击「添加触发器」,选择函数LimitPakYoga
    • 事件类型选择「从电子表格」→「编辑时」,保存即可
  3. 修改代码适配新逻辑
    替换原有的邮箱获取方式,并增加匿名用户的拦截处理:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:33:26