Google Spreadsheets:无法通过Session.getActiveUser()获取用户电子邮件.getEmail()

时间:2014-03-11 00:03:17

标签: email session google-apps-script google-sheets

所以我有一个电子表格,可以自动获取每个用户的电子邮件,并为他们的电子邮件分配自定义用户名。我使用这些数据在工作表上显示每行“最后由---编辑”。这也允许我列出查看电子表格的所有用户以及他们上次打开电子表格时的日志。

但是,Session.getActiveUser()。getEmail()为除我以外的任何人返回一个空字符串。

我已经看到你可以这样做,以便脚本在用户的帐户下运行。但这仅适用于已部署的Web应用程序。我需要将它集成到电子表格中。关于我应该如何做的任何想法?

2 个答案:

答案 0 :(得分:0)

部署为Web应用程序(发布)允许您在脚本运行的“权限”或实体下进行设置。如果您将脚本设置为以访问应用程序的用户身份运行,然后使用下面的代码,您将获得“行更新时间为3/11/14”,其中包含实际用户名。如果您像您一样运行应用程序,那么它会将您视为有效用户,并始终将您的电子邮件放在那里。如果应用程序以用户身份运行,而不是作者,并且以用户访问方式发布,则应用程序将在更新后的字符串中写入用户的电子邮件。我在自己的域中对此进行了测试,但无法链接到我们域外的测试表。

function onEdit(event){
  Logger.log(event.source.parameters);
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var actSht = event.source.getActiveSheet();
  var actRng = event.source.getActiveRange();
  var index = actRng.getRowIndex();
  var user = Session.getEffectiveUser().getEmail();
  Logger.log(index);
  var dateCol = actSht.getLastColumn();
  var lastCell = actSht.getRange(index,dateCol);
  var date = Utilities.formatDate(new Date(), "GMT-6", "MM/dd/yyyy HH:mm:ss");
  lastCell.setValue("Row Updated " +date+" by "+user);

}

答案 1 :(得分:0)

首先应在脚本编辑器中运行onEdit函数并对其进行授权,然后它应显示当前用户。