onEdit触发器不会捕获当前用户

时间:2018-02-04 17:04:47

标签: google-apps-script triggers google-sheets

我试图为使用单元格注释的工作表构建一个简单的日志。 不知何故,我不能包含触发onEdit-event的用户的电子邮件。

function onEdit(e){
    var email = Session.getActiveUser().getEmail();
    var date = String(Utilities.formatDate(new Date(), 'Europe/Berlin', 'HH:mm dd/MM/yy'));
    var range = e.range;
    range.setNote(email + " @ " + date);
}

注释显示在单元格上,但电子邮件为空。这可能与缺少权限有关吗?我假设如果我的代码出现问题,那么该单据中所编辑的单元格上的注释就不会出现...

1 个答案:

答案 0 :(得分:2)

以下是Google文档中有关Session类

的内容
  

Session类提供对会话信息的访问,例如   用户的电子邮件地址(在某些情况下)和语言设置。

关于'getActiveUser()'方法,它说明了

  

如果安全策略不允许访问   用户的身份,User.getEmail()返回一个空字符串。该   电子邮件地址可用的情况有所不同:for   例如,用户的电子邮件地址在任何上下文中都不可用   允许脚本在没有该用户授权的情况下运行,例如   简单的onOpen(e)或onEdit(e)触发器,Google中的自定义功能   表格,或部署为“以我身份执行”的Web应用程序(即授权   由开发人员而不是用户)。但是,这些限制   如果开发者和用户属于,通常不适用   相同的G Suite域名。

因为你使用简单的触发器 - onEdit() - 除非用户明确授权,否则代码将不会执行。对于可安装的触发器,这意味着从脚本编辑器手动执行该函数。

您可以将项目发布为工作表加载项。在这种情况下,将要求用户授予在附加清单中声明的​​权限。

更多信息https://developers.google.com/apps-script/reference/base/session