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

电子表格单元格被编辑时如何通过脚本获取对应编辑者的邮箱?

问题根因

1. 触发器权限限制

你当前使用的是简单onEdit触发器,这类触发器权限受限,Session.getActiveUser()仅在所有协作者和脚本所有者属于同一Google Workspace域时才会返回有效值,外部用户或异域用户编辑时会返回空值。而getEffectiveUser()获取的是脚本部署者的身份,所以永远只会返回你自己的账号信息,无法拿到其他编辑者的信息。

2. 代码语法错误

你已经通过Session.getActiveUser().getEmail()获取了字符串类型的邮箱值,后续调用email()相当于把字符串当作函数执行,会直接抛出异常,这也是脚本无输出的直接原因。同时你把Logger.log放在了函数外部,脚本初始化执行时没有编辑事件上下文,自然拿不到对应用户信息。

修复方案
  • 改用可安装编辑触发器,这类触发器有更高的接口调用权限,同域内协作者编辑时可以正常获取到对应邮箱
  • 修正代码中的语法错误,调整日志输出位置

修正后的代码如下:

function recordEditorEmail() {
  var s = SpreadsheetApp.getActiveSheet();
  // 仅匹配TEST表的编辑操作
  if( s.getName() == "TEST" ) {
    var r = s.getActiveCell();
    var email = Session.getActiveUser().getEmail();
    Logger.log("当前编辑者邮箱:" + email);
    // 匹配第4列的编辑操作
    if( r.getColumn() == 4 ) {
      var nextCell = r.offset(0, 1);
      // 目标单元格为空时才写入邮箱
      if( nextCell.getValue() === '' ) {
        nextCell.setValue(email);
      }
    }
  }
}

触发器安装步骤

打开对应谷歌表格 -> 点击顶部「扩展程序」-> 选择「Apps脚本」进入脚本编辑器 -> 点击左侧菜单栏的「触发器」选项 -> 点击右下角「添加触发器」按钮 -> 选择要运行的函数为recordEditorEmail -> 事件来源选择「电子表格」-> 事件类型选择「编辑时」-> 按照页面提示完成权限授权即可。

注意事项

如果表格共享给了非同一Google Workspace域的外部用户,受谷歌隐私政策限制,依然无法获取到这类用户的邮箱信息,仅同域内协作者可正常识别。

内容的提问来源于stack exchange,提问作者Renzo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:57:02