#google-apps-script #google-sheets #triggers
#google-apps-script #google-sheets #срабатывает
Вопрос:
Я пытаюсь отправить электронные письма с определенной вкладкой электронной таблицы Google в виде вложения Excel 40-50 студентам, используя устанавливаемый триггер редактирования. Он показывает
Исключение: у вас нет разрешения на вызов UrlFetchApp.fetch. Требуемые разрешения: googleapis.com/auth/script.external_request .
Я просмотрел несколько связанных сообщений и ответил на Stackoverflow и Google, но в любом случае не могу найти, чтобы сделать это вручную.
Мои коды:
function classAttendance(e){
var spreadsheet = SpreadsheetApp.getActive();
var dashboard = spreadsheet.getSheetByName("Dashboard");
var sheetName = dashboard.getRange("A4").getValue();
var sheetw = dashboard.getRange("A8");
var sheetw2 = dashboard.getRange("G8");
if (sheetName == 'All'){
if (e.range.getA1Notation() === 'C6' amp;amp; e.range.getValue() === "Send Emails") {
sheetw.setValue('Sending emails to all students. Please Wait!').setFontColor('Red');
//refreshSheet();
sendEmails();
sheetw.setValue('You may take class attendance now. Thank You!').setFontColor('Green');
sheetw2.setValue('You may do manual entry now. Thank You!').setFontColor('Green');
}
if ((e.range.getA1Notation() === 'C6') amp;amp; (e.range.getValue() === "Start 1-Period" || e.range.getValue() === "Start 2-Period" || e.range.getValue() === "Error Correction")) {
dashboard.getRange("C6").setValue('Please Select');
}
}
}
function sendEmails(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var ssID = ss.getId();
var sheetName = ss.getName();
var sh = SpreadsheetApp.getActive();
var sheet1 = sh.getSheetByName("TempDataSet");
var shID = sheet1.getSheetId().toString();
var subject = 'Your Attendance Record at BDU';
var body = 'Dear Student,' 'nn' 'Greetings! Please find the attendance record attached for your reference.' 'nn' 'Thank you.';
var requestData = {"method": "GET", "headers":{"Authorization":"Bearer " ScriptApp.getOAuthToken()}};
var url = "https://docs.google.com/spreadsheets/d/" ssID "/export?format=xlsxamp;id=" ssID "amp;gid=" shID;
var result = UrlFetchApp.fetch(url , requestData);
var contents = result.getContent();
var column = 3;
contents.sort({column: column, ascending:true});
var sheet2 = sh.getSheetByName('StudentList');
var data = sheet2.getLastRow();
var students = [];
var students = sheet2.getRange(2, 6, data).getValues();
for (var i=0; i<students.length; i ){ // you are looping through rows and selecting the 1st and only column index
if (students[i][0] !== ''){
MailApp.sendEmail(students[i][0].toString(), subject ,body, {attachments:[{fileName:sheetName ".xls", content:contents, mimeType:"application//xls"}]});
}
}
}
Я создал автономные скрипты, в которых есть много функций, в том числе sendEmails()
на моем Google Диске, затем вызвал скрипты в виде библиотеки в моей электронной таблице Google. Затем я вызвал библиотеку в редакторе сценариев моего Google Sheet, а также создал триггер onEdit для SendEmails(). Все остальные функции в вызванной библиотеке работают нормально.
Комментарии:
1. Какой тип триггера? Установленный или простой?
2. Вы просматривали журналы ошибок в разделе просмотр> выполнение?
3. простой триггер onEdit с автономными сценариями
4. Простое имя функции запуска должно быть
onEdit
. ВашsendEmails
. Простые триггеры будут работать только с «привязанными» сценариями, а не с «автономными». Рассмотрите основную документацию. Также простые триггеры не могут отправлять электронную почту. Вам понадобятся устанавливаемые триггеры.5. Удалите триггер редактирования и прочитайте его. Это должно снова вызвать авторизацию. Попробуйте запустить
classAttendance2
вручную из редактора сценариев>, что также должно вызвать авторизацию.
Ответ №1:
Библиотека, похоже, добавлена после добавления триггера. Следовательно, области авторизации отсутствуют при предыдущей авторизации. Следующее должно вызвать повторную авторизацию:
-
Удалите установленный триггер редактирования и повторно добавьте его.
-
Нажмите
Run
кнопку после выбораclassAttendance2
вручную в редакторе сценариев>