我有许多GoogleScript项目,它们在表单提交时与触发器可靠地工作。离开办公桌几个月后,我创建了一个项目,尽管手动运行脚本时脚本可以正常工作,但触发器(在表单提交时)没有效果。几个小时后,我收到电子邮件报告,其中列出错误为“执行该操作需要授权”。我发现其他人以前也有过此类错误。我尝试过注销和重新登录,并删除项目触发器并将其添加回来。
任何帮助都将不胜感激——我的组织已经开始依赖触发器运行脚本。我在下面附上我的脚本,如果是脚本本身的问题。
function sendLike() {
var mainSheet = SpreadsheetApp.openById('12345');
var sheet = mainSheet.getSheetByName('Likes');
var lastRow = sheet.getLastRow();
var timestamp = sheet.getRange(lastRow, 1).getValue();
var teacher = sheet.getRange(lastRow, 2).getValue();
var grade = sheet.getRange(lastRow, 3).getValue();
if (grade == "sixth") {
gradeColumn = 4;
} else if (grade == "seventh") {
gradeColumn = 5;
} else if (grade == "eighth") {
gradeColumn = 6;
}
var studentName = sheet.getRange(lastRow, gradeColumn).getValue();
var positiveDescription = sheet.getRange(lastRow, 7).getValue();
var roster;
var rosterSheetLastRow;
var rosterArray;
var teacherRow;
var currentTally;
var updatedTally;
var rosterSheet = mainSheet.getSheetByName(grade);
var receivedLikeSubject = "You got a Like!";
var receivedLikeMessage = "Well done!";
var staffFlag = false;
var teacherRosterSheet = mainSheet.getSheetByName('staff_roster');
var staffLastRow = teacherRosterSheet.getLastRow();
var teacherArray = teacherRosterSheet.getRange(2, 1, (staffLastRow - 1)).getValues();
var teacherTotalLikes = 0;
var teacherNewLikes = 0;
var staffRow = 0;
var j;
for (j = 0; j < staffLastRow; j++) {
if (teacherArray[j] == teacher) {
staffFlag = true;
staffRow = j + 2;
}
}
if (staffFlag) {
rosterSheetLastRow = rosterSheet.getLastRow();
rosterArray = rosterSheet.getRange(2, 1, (rosterSheetLastRow - 1)).getValues();
var studentRow = 0;
var currentTally = 0;
var studentId = "";
var studentEmail = "";
var newTally = 0;
var i;
for (i = 0; i < rosterSheetLastRow; i++) {
if (rosterArray[i] == studentName) {
studentRow = i + 2;
currentTally = rosterSheet.getRange(studentRow, 3).getValue();
newTally = currentTally + 1;
rosterSheet.getRange(studentRow, 3).setValue(newTally);
studentId = rosterSheet.getRange(studentRow, 2).getValue();
}
}
teacherTotalLikes = teacherRosterSheet.getRange(staffRow, 2).getValues();
teacherNewLikes = parseInt(parseInt(teacherTotalLikes) + 1);
teacherRosterSheet.getRange(staffRow, 2).setValue(teacherNewLikes);
studentEmail = studentId +"@asdf.org";
MailApp.sendEmail({
to: studentEmail,
subject: receivedLikeSubject,
htmlBody: receivedLikeMessage
});
}
}