Внезапная ошибка сценария при отправке электронной почты 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(сообщение)
- sendEmail(получатель, тема, тело)
- sendEmail(получатель, тема, тело, параметры)
- sendEmail(кому, replyTo, тема, тело)
Это причина ошибки, которую вы получаете.
Решение:
Я не уверен, что именно вы хотите сделать, но я предполагаю, что это стоит того, что вы хотели использовать этот метод: sendEmail(получатель, тема, тело, параметры), и что вы предоставили два параметра для
recipient
:
email
и
Session.getActiveUser().getEmail()
.
В этом случае вы должны выбрать, какой из них вы хотите быть получателем, и удалить другого.
Если вы хотите, чтобы выбор зависел от того,
email
был предоставлен, вы можете использовать тернарный оператор:
email ? email : Session.getActiveUser().getEmail()