Google App Scripts onOpen () не работает на листах - PullRequest
0 голосов
/ 17 января 2019

Я не могу запустить скрипт при открытии электронной таблицы. Я установил триггер вручную см. . Область авторизации также была установлена.

Код предназначен для извлечения некоторой контактной информации из таблицы на листе, создания контакта, а затем добавления этого контакта в список адресов электронной почты, указанный в таблице. Существует функция, позволяющая проверить, существует ли это письмо, и предотвратить его дублирование. Код работает нормально, если я запускаю его из редактора скриптов. Я не уверен, почему я не могу запустить его с триггером onOpen(e).

Я думал, что проблема связана с этим , но минимальный минимальный код работает для меня и создает второй лист на триггере открытия.

Любая помощь оценена, потому что я застрял - это должно быть что-то с моим кодом.

Код:

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 голосов
/ 17 января 2019

Простые триггеры нельзя использовать для процессов, требующих авторизации.

Чтение немного дальше документации гласит:

Триггеры приложений G Suite

Устанавливаемые триггеры для приложений G Suite концептуально похожи на простые триггеры, такие как onOpen (), но они могут реагировать на дополнительные события и ведут себя по-разному.

Например, устанавливаемый триггер открытия для Google Sheets активируется всякий раз, когда электронная таблица открывается любым пользователем, имеющим доступ к редактированию, так же, как простой триггер onOpen (). Однако устанавливаемая версия может вызывать службы, требующие авторизации. Устанавливаемая версия запускается с авторизацией пользователя, создавшего триггер, даже если другой пользователь с правами доступа открывает электронную таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...