Google Sheet - 检测用户编辑工作表" onEdit"

时间:2017-12-07 08:47:20

标签: google-apps-script google-sheets

自从过去几天以来,我一直在努力解决一个非常基本的问题,这就是我想要实现的目标。 我有一个与团队共享的谷歌表。每个团队成员将在工作表中添加一行或多行。工作表中有一列应记录进行更改的人员的电子邮件ID。这就是我试图实现这个目标的方法 -

  • 我创建了一个简单的" onEdit"触发但意识到如果他不是所有者,则不允许此触发器访问编辑者身份。
  • 我将整个代码移动到一个单独的脚本中并将其作为webapp发布,但仍然是" Session.getActiveUser()"返回空白和" Session.getEffectiveUser()"返回工作表所有者的电子邮件。
  • 我创建了一个自定义菜单,并要求用户在继续之前单击该菜单,并且在自定义菜单的操作中我首先强制用户通过使用进行身份验证 SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet()。getId());尝试然后尝试了以下事项 -

  • 我创建了一个可执行文件" onEdit"通过每个用户的代码触发。这工作了几次,但是当我与另一个用户登录时 这种行为非常难以预测,我无法得出结论 发生在这里。 (有时会收到用户的电子邮件,有时会收到电子邮件 所有者)

    我在尝试进行身份验证并将其保存在userProperties中时获取用户电子邮件。然后我尝试在" onEdit"中取出它。但又来了 切换用户时行为不一致。

  • 我也尝试了另一个线程中提到的方法。但这又是行不通的。这是该代码的代码:

  function getUserEmail() {
  var protection=SpreadsheetApp.getActive().getRange("B2").protect();
  var userEmail='';
  Session.getEffectiveUser();
  protection.removeEditors(protection.getEditors());
  var editors=protection.getEditors();
  var user1=editors.pop().toString()
  if(editors.length==1){
    var owner=SpreadsheetApp.getActive().getOwner().getEmail();
    if(owner==user1){
      userEmail=editors.pop().toString()
    }else{
      userEmail = user1
    }
  }else{
    userEmail = user1
  }
  protection.remove();
  return userEmail;
}

<小时/> 我真的没有在这里的想法和失去我的希望,任何建议都非常感谢。

  

请注意 - 我可以强制用户在会话期间对菜单项进行身份验证或按一次,但在此之后,它应该在编辑任何内容时自动获取电子邮件ID。

感谢。

0 个答案:

没有答案