1

情况:

我有一个包含 15 个工作表和 20 个用户登录并修改它的电子表格。

我有以下脚本,应该与打开电子表格的用户电子邮件地址一起发送电子邮件。

需要的脚本功能:

  1. 当用户打开电子表格时发送电子邮件。

问题:

Session.getEffectiveUser() 仅从脚本所有者那里获取电子邮件,而不是获取我的用户电子邮件。

自 July23 以来的 Session.getEffectiveUser() 应该得到用户的重新授权。我执行以下说明以重新批准其他用户脚本和 Google 帐户的脚本

测试用例:

当有人打开电子表格时,此脚本会触发。

    function LoginShift(){
      var ss = SpreadsheetApp.getActiveSpreadsheet();
         MailApp.sendEmail("xxxxxx@gmail.com", "Login Shift" , "Login UserName: " + Session.getEffectiveUser());
      }
  1. 当我与脚本的所有者一起打开电子表格时,同样会向我发送一封电子邮件,其中包含打开电子表格的电子邮件地址。
  2. 当我使用不是脚本所有者的其他用户打开电子表格时,脚本运行并发送电子邮件,但使用所有者邮箱而不是打开电子表格的用户的邮箱。

我有其他带有 Session.getEffectiveuser() 的脚本,但是 onEdit 并且工作正常。我不知道为什么这个脚本没有从 getEffectiveUser 获取电子邮件地址。

4

1 回答 1

1

文档中描述了一些功能:

了解触发器

...

可安装触发器

...

  • 打开电子表格或表单编辑器时。(请注意,此触发器不会在用户打开表单进行响应时激活,而是在编辑器打开表单进行修改时激活。)与简单的触发器 onOpen 不同,可安装触发器可以充当安装触发器的用户。

...

根据文档,您提到的行为符合预期。

更新

如果您有一个简单触发器( onInstall, onOpen, onEdit),如下所示:

function onOpen() {
  Logger.log('getActiveUser(): ' + Session.getActiveUser());
  Logger.log('getEffectiveUser(): ' + Session.getEffectiveUser());
}

脚本的所有者执行时,结果如下:

getActiveUser(): owner_of_the_script
getEffectiveUser(): owner_of_the_script

当由另一个用户(不是脚本的所有者)执行时,结果如下:

getActiveUser(): 
getEffectiveUser(): user_activates_the_trigger

重要提示:阅读文档中简单触发器限制。

如果您有一个如下所示的可安装触发器onOpen并将函数添加到电子表格的事件中:

function myOnOpen() {
  Logger.log('getActiveUser(): ' + Session.getActiveUser());
  Logger.log('getEffectiveUser(): ' + Session.getEffectiveUser());
}

脚本的所有者执行时,结果如下:

getActiveUser(): owner_of_the_script
getEffectiveUser(): owner_of_the_script

当由另一个用户(不是脚本的所有者)执行时,结果如下:

getActiveUser(): 
getEffectiveUser(): owner_of_the_script
于 2013-08-18T13:37:08.153 回答