Показывает ошибку исключения при попытке отправить электронные письма с листом в виде вложения Excel

#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 вручную в редакторе сценариев>