当有人使用Google Script打开电子表格时如何发送提醒

时间:2013-08-18 12:37:48

标签: google-apps-script google-sheets

情况:

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

我有以下脚本,应该发送一封电子邮件,其中包含打开电子表格的用户电子邮件地址。

需要的脚本功能:

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

    Session.getEffectiveUser()只收到来自脚本所有者的电子邮件,而不是收到我的用户电子邮件。

    自7月23日起,Session.getEffectiveUser()应该从用户那里获得重新自动化。我执行以下注释以重新批准其他用户Script and Google Account

    的脚本

    测试用例:

    当有人打开spreadhseet时,此脚本会触发。

        function LoginShift(){
          var ss = SpreadsheetApp.getActiveSpreadsheet();
             MailApp.sendEmail("xxxxxx@gmail.com", "Login Shift" , "Login UserName: " + Session.getEffectiveUser());
          }
    
    1. 当我与脚本的所有者一起打开电子表格时,同样向我发送了一封电子邮件,其中包含打开电子表格的电子邮件地址。
    2. 当我使用不是脚本所有者的不同用户打开电子表格时,脚本会运行并发送电子邮件,但使用所有者邮箱,而不是打开电子表格的用户的邮箱。
    3. 我有其他脚本与Session.getEffectiveuser()但onEdit,并且工作正常。我不知道为什么这个脚本没有从getEffectiveUser获取电子邮件地址。

1 个答案:

答案 0 :(得分:1)

文档中描述了一些功能:

Understanding Triggers

...

可安装触发器

...

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

...

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

<强>更新

如果您有简单触发器onInstallonOpenonEdit),则如下所示:

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

重要提示:请阅读documentation 简单触发器的限制。

如果您有可安装触发器,请按以下步骤添加该功能:

onOpen

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

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

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

getActiveUser(): owner_of_the_script
getEffectiveUser(): owner_of_the_script