Google App脚本onOpen()触发器不适用于工作表

时间:2019-01-17 02:44:29

标签: javascript google-apps-script google-sheets

我无法让我的脚本在打开电子表格时运行。我已经手动设置了触发器see。授权范围也已设置。

该代码旨在从工作表的表格中获取一些联系信息,创建联系人,然后将该联系人添加到表中指定的电子邮件列表中。有一个功能可以检查此电子邮件是否已经存在并防止重复。如果我从脚本编辑器运行该代码,则该代码可以正常工作。我不确定为什么无法使用onOpen(e)触发器来运行它。

我认为问题与this有关,但最低限度的代码对我有用,并在打开触发器上创建了第二张纸。

任何帮助我都感激不已-我的代码一定有帮助。

代码:

function onOpen(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dataRange = sheet.getDataRange();
  var data = dataRange.getValues();
  

  // Iterate through all the data minus the header
  for (var i=1; i<data.length; i++){
    currApplicant = data[i]
    applicantFirstName = currApplicant[1]
    applicantLastName = currApplicant[2]
    applicantEmail = currApplicant[3]
    emailGroup = currApplicant[13]
    addToEmailBool = currApplicant[12]    //do you want to add them to the email list?
    var numDuplicates = 0;

    Logger.log(applicantEmail); 

    if ((addToEmailBool == 1) && (emailGroup != "")) {
        var duplicateCounter = 0; 
        var numDuplicates = checkForDuplicates(emailGroup, applicantEmail);
      
      if (numDuplicates==0){
        var contact = ContactsApp.createContact(applicantFirstName, applicantLastName, applicantEmail);
        var members = ContactsApp.getContactGroup(emailGroup);
        members.addContact(contact);
        Logger.log("Adding:", applicantEmail)
        Browser.msgBox("Added new contact");
      }
    }
  }
  
}

function checkForDuplicates(emailGroup, applicantEmail) { 
  var duplicateCounter = 0; 
  var groupContacts = ContactsApp.getContactGroup(emailGroup).getContacts()
  
  //go thru all the contacts in this group and check if their emails == applicantEmail
  for (var i in groupContacts) {
    var emails = groupContacts[i].getEmails();   
    for (var e in emails) {
      if (emails[e].getAddress() == applicantEmail){
        duplicateCounter += 1;
        Logger.log("Duplicate found:", applicantEmail);       
      }
    }
  }
  return duplicateCounter;
}

1 个答案:

答案 0 :(得分:0)

简单触发器不能用于需要授权的进程。

进一步阅读文档说明:

G Suite application triggers

G Suite应用程序的可安装触发器在概念上类似于简单的触发器(如onOpen()),但是它们可以响应其他事件,并且行为不同。

例如,只要具有编辑权限的任何用户打开电子表格,就可以激活Google表格的可安装打开触发器,就像简单的onOpen()触发器一样。 但是,可安装版本可以调用需要授权的服务。即使其他具有编辑访问权限的用户打开了电子表格,该可安装版本也会在创建触发器的用户的授权下运行。