【问题标题】:Google Spreadsheets: Can't Fetch User Email via Session.getActiveUser().getEmail()Google 电子表格:无法通过 Session.getActiveUser().getEmail() 获取用户电子邮件
【发布时间】:2014-03-11 00:03:17
【问题描述】:

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

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

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

【问题讨论】:

  • 你试过.getEffectiveUser().getEmail()吗?或者,您在发布脚本时使用了哪些设置?您是否将其设置为以您身份运行,或者以访问电子邮件的用户身份运行?查看这里的文档developers.google.com/apps-script/reference/base/session
  • getEffectiveUser() 只返回我自己的电子邮件,即使其他人正在打开工作表。
  • 然后您的应用程序被发布为以您的身份运行,而不是以访问该应用程序的用户身份运行。如果您可以更改它并保留功能,请尝试这种方式。如果没有,您将必须添加一个界面来编辑作为 Ui 一部分收集其电子邮件的工作表。送孩子们上学后,我会在几个小时内考虑组装一些东西。
  • 谢谢,但是 afaik,将脚本部署为网络应用程序不允许我使用本机 google 电子表格界面。如果我将其部署为 Web 应用程序,我只能将脚本设置为以用户身份运行。我完全在处理电子表格,因为我需要的所有数据都已经在那里了。谢谢,我会等你的模型。
  • 您使用的是普通的 gmail 帐户还是域帐户?在第一种情况下,这是很长一段时间内的正常行为(几年前它还在工作,但已被有意删除)此处的文档:developers.google.com/apps-script/reference/base/session?hl=en

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


【解决方案1】:

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

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);

}

【讨论】:

  • 我不明白你的回答。如何将 onEdit 函数部署为 webapp?你能解释一下你想象的从电子表格开始的工作流程吗?
  • 对不起,这是一个措辞不当的回应。我正在考虑在具有附加功能的较大脚本的上下文中使用 onEdit。另外,当我谈论发布时,我指的是当您单击脚本菜单中的发布选项时出现的选项(发布 > 部署为 webapp ... > 版本 > 执行为 > 谁有权访问),但我在想它在电子表格的上下文中。就工作流程而言,他有一个电子表格,用户对其进行编辑,最后一列由用户 Y 添加在 X 上的更新。我经常使用这种类型的东西来回复表单。
  • 对不起,我没有关注你。部署的应用程序不能在使用 onEdit 触发器的电子表格的上下文中使用。电子表格使用已部署应用程序的唯一方法是对该服务应用程序使用 urlFetch,但这是完全不同的,不会为 getEmail 问题带来解决方案。帖子作者的评论已经在上面提到了。
  • 您选择设置“谁”运行 Web 应用程序的菜单选项称为“部署为 Web 应用程序”,它位于脚本菜单栏中(文件、编辑、查看、运行、发布、资源、帮助)在发布菜单下。如果术语错误,那是在谷歌的最后,因为这就是菜单选项的名称。我将这段确切的代码放在电子表格中的容器绑定脚本中,并从我们业务域中的两个不同用户帐户运行它。它在我以作者身份登录和以用户身份登录时收集了我的地址,因为我发布了应用程序以作为访问应用程序的用户运行。
  • 我不想在这里争论,但我建议您“禁用该 webapp”(或更改“运行方式”参数),您会注意到代码仍将继续工作.它在您的代码中工作的原因是因为您有一个域帐户。没有别的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    相关资源
    最近更新 更多