Внезапная ошибка сценария при отправке электронной почты Google Sheet в PDF

У меня есть электронная таблица Google с кнопкой скрипта, чтобы отправить лист в формате PDF по электронной почте в B5. Это отлично работает почти год, код не менялся, а потом вдруг сегодня скрипт перестал работать, и у нас возникла ошибка:

"Исключение: параметры (String,String,String,String,(class)) не соответствуют сигнатуре метода для MailApp.sendEmail".

Похоже, что могло быть обновление для вызова MailApp.sendEmail, но я проверил их страницу и, похоже, не могу найти обновление или различие между тем, что им требуется, и тем, что было моим старым кодом; поэтому я не уверен, как правильно его обновить. Я прочитал несколько сообщений здесь, в StackFlow и Reddit, где у людей были похожие проблемы, но немного разные, и я не смог найти решения. Кто-нибудь может мне помочь?

Ссылка на вызов MailApp.sendEmail:https://developers.google.com/apps-script/reference/mail/mail-app

Вот мой код:

//EMAIL SHEET AS PDF
//Type First Last name into B4, must be spelled correctly for the query to pull records into the sheet.
//Enter Email Address into B5 separated by a comma
//Select Email Button


function emailPDFofTraining(){ // this is the function to call
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheets()[0]; // it will send sheet 0 wich is the first sheet in the spreadsheet.
  // if you change the number, change it also in the parameters below
  var shName = sh.getName()
  sendSpreadsheetToPdf(0, shName, sh.getRange('B4').getValue(),"Mountain Training");
}
function sendSpreadsheetToPdf(sheetNumber, pdfName, email,subject, htmlbody) {
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var spreadsheetId = spreadsheet.getId()  
  var sheetId = sheetNumber ? spreadsheet.getSheets()[sheetNumber].getSheetId() : null;  
  var url_base = spreadsheet.getUrl().replace(/edit$/,'');
  var name = SpreadsheetApp.getActiveSheet().getRange('B3').getValue();
  var date = SpreadsheetApp.getActiveSheet().getRange('B6').getValue();
  

  var url_ext = 'export?exportFormat=pdf&format=pdf'   //export as pdf

      + (sheetId ? ('&gid=' + sheetId) : ('&id=' + spreadsheetId)) 
      // following parameters are optional...
      + '&size=A4'      // paper size
      + '&portrait=true'    // orientation, false for landscape
      + '&fitw=true'        // fit to width, false for actual size
      + '&sheetnames=true&printtitle=false&pagenumbers=true'  //hide optional headers and footers
      + '&gridlines=false'  // hide gridlines
      + '&fzr=false';       // do not repeat row headers (frozen rows) on each page

  var options = {
    headers: {
      'Authorization': 'Bearer ' +  ScriptApp.getOAuthToken(),
    }
  }

  var response = UrlFetchApp.fetch(url_base + url_ext, options);
  var blob = response.getBlob().setName(pdfName + '-' + name + '.pdf');
  if (email) {
    var mailOptions = {
      attachments:blob, htmlBody:htmlbody
    }
MailApp.sendEmail(
      email, Session.getActiveUser().getEmail(), 
      subject+ pdfName + '-' + name + ".pdf')", 
      "Mountain Training Certification is attached for "+name+". .or support, contact the Mountain Project Manager or reply to this email.",
      mailOptions);
  }
}

1 ответ

Проблема:

Вы предоставляете пять параметров для sendEmail. Но из всех разных sendEmail методов, не существует реализации, которая принимает пять параметров:

Это причина ошибки, которую вы получаете.

Решение:

Я не уверен, что именно вы хотите сделать, но я предполагаю, что это стоит того, что вы хотели использовать этот метод: sendEmail(получатель, тема, тело, параметры), и что вы предоставили два параметра для recipient: email и Session.getActiveUser().getEmail().

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

Если вы хотите, чтобы выбор зависел от того, emailбыл предоставлен, вы можете использовать тернарный оператор:

email ? email : Session.getActiveUser().getEmail()
Другие вопросы по тегам