我无法让我的脚本在打开电子表格时运行。我已经手动设置了触发器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;
}
答案 0 :(得分:0)
简单触发器不能用于需要授权的进程。
进一步阅读文档说明:
G Suite应用程序的可安装触发器在概念上类似于简单的触发器(如onOpen()),但是它们可以响应其他事件,并且行为不同。
例如,只要具有编辑权限的任何用户打开电子表格,就可以激活Google表格的可安装打开触发器,就像简单的onOpen()触发器一样。 但是,可安装版本可以调用需要授权的服务。即使其他具有编辑访问权限的用户打开了电子表格,该可安装版本也会在创建触发器的用户的授权下运行。