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

Google Apps Script异常:无法获取授权协作者的编辑者邮箱

解决Google Apps Script onEdit触发器无法获取协作者邮箱的问题

我写了一段Google Apps Script的onEdit触发器代码,需求是当Google表格A列被修改时,自动把编辑者的邮箱填入对应行的F列;如果A列内容被删除,就清空对应F列的内容。但目前这段代码只对我自己有效,已经获取权限的第二位协作者编辑时,F列无法显示他们的邮箱。原代码如下:

function onEdit(e) {
    const range = e.range;
    const sheet = range.getSheet();
    const editedColumn = range.getColumn();
    const editedRow = range.getRow();

    // Check if the edit is in column A
    if (editedColumn === 1) {
        // If content is deleted in column A, clear the corresponding cell in column F
        if (range.isBlank()) {
            sheet.getRange(editedRow, 6).clearContent(); // Clear content in column F
        } else if (editedRow > 1) { // Avoid clearing header row
            // Get the email of the editor
            const editorEmail = e.user.email;

            // Update the corresponding cell in column F with the editor's email
            sheet.getRange(editedRow, 6).setValue(editorEmail);
        }
    }
}

问题原因

问题出在简单触发器的权限限制。默认的onEdit简单触发器运行在受限模式下,没有访问用户敏感信息(比如邮箱)的权限,只有脚本所有者自己操作时能读取e.user.email,协作者操作时会因权限不足无法获取该值。

解决方案

必须换成可安装的onEdit触发器,并授予对应的敏感权限,具体步骤如下:

1. 修改脚本代码

将原函数重命名(避免和简单触发器冲突),调整权限相关的获取邮箱逻辑:

function trackEditor(e) {
    const range = e.range;
    const sheet = range.getSheet();
    const editedColumn = range.getColumn();
    const editedRow = range.getRow();

    // 仅处理A列的编辑,且跳过表头行
    if (editedColumn === 1 && editedRow > 1) {
        if (range.isBlank()) {
            // A列内容删除时,清空对应F列
            sheet.getRange(editedRow, 6).clearContent();
        } else {
            // 获取编辑者邮箱(可安装触发器有权限访问)
            const editorEmail = Session.getActiveUser().getEmail();
            sheet.getRange(editedRow, 6).setValue(editorEmail);
        }
    }
}

2. 创建可安装触发器

  • 打开Google表格的脚本编辑器,点击左侧「触发器」图标(闹钟形状)
  • 点击「添加触发器」按钮,配置以下选项:
    • 要运行的函数:trackEditor
    • 部署来源:Head
    • 事件源:从电子表格
    • 事件类型:编辑时
  • 保存后会弹出授权窗口,完成授权(若出现「此应用未验证」提示,点击「高级」→「转到XX脚本(不安全)」继续即可,属于自定义脚本的正常情况)。

注意事项

  • 确保协作者已获得表格的编辑权限,否则触发器无法捕获他们的操作。
  • 可安装触发器的权限是基于脚本所有者的授权,因此所有协作者的编辑操作都会以所有者的权限执行,从而能正常获取编辑者邮箱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:25:16