Google apps script 将Google工作表发送到PDF时出现突然脚本错误

Google apps script 将Google工作表发送到PDF时出现突然脚本错误,google-apps-script,macos-mail-app,Google Apps Script,Macos Mail App,我有一个带有脚本按钮的谷歌电子表格,可以将表格以PDF格式发送到B5中的电子邮件中。这已经运行了将近一年,没有代码更改,然后今天脚本突然停止工作,我们出现了一个错误: 异常:参数(字符串、字符串、字符串、字符串、(类))与MailApp.sendEmail的方法签名不匹配 看起来MailApp.sendEmail呼叫可能有更新,但我查看了他们的页面,似乎找不到更新或他们要求的与我的旧代码之间的区别;所以我不知道如何正确地更新它。我阅读了StackFlow和Reddit上的几个帖子,其中人们有类似

我有一个带有脚本按钮的谷歌电子表格,可以将表格以PDF格式发送到B5中的电子邮件中。这已经运行了将近一年,没有代码更改,然后今天脚本突然停止工作,我们出现了一个错误:

异常:参数(字符串、字符串、字符串、字符串、(类))与MailApp.sendEmail的方法签名不匹配

看起来MailApp.sendEmail呼叫可能有更新,但我查看了他们的页面,似乎找不到更新或他们要求的与我的旧代码之间的区别;所以我不知道如何正确地更新它。我阅读了StackFlow和Reddit上的几个帖子,其中人们有类似的问题,但略有不同,我无法找到解决方案。有人能帮我吗

链接到MailApp.sendEmail呼叫:

这是我的密码:

//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);
  }
}
问题: 您为
sendmail
提供了五个参数。但是在所有不同的
sendmail
方法中,没有一种实现可以接受五个参数:

这就是你所犯错误的原因

解决方案: 我不确定您到底想做什么,但我想,值得一提的是,您想使用此方法:,并且您为
收件人提供了两个参数:
email
Session.getActiveUser().getEmail()

在这种情况下,您应该选择其中一个作为收件人,然后删除另一个

如果希望选择取决于是否提供了参数
email
,可以使用:

问题: 您为
sendmail
提供了五个参数。但是在所有不同的
sendmail
方法中,没有一种实现可以接受五个参数:

这就是你所犯错误的原因

解决方案: 我不确定您到底想做什么,但我想,值得一提的是,您想使用此方法:,并且您为
收件人提供了两个参数:
email
Session.getActiveUser().getEmail()

在这种情况下,您应该选择其中一个作为收件人,然后删除另一个

如果希望选择取决于是否提供了参数
email
,可以使用:


请你尝试一下这个问题的答案所建议的两个小修改,并让我知道它是否有效:你可以尝试一下这个问题的答案所建议的两个小修改,并让我知道它是否有效:
email ? email : Session.getActiveUser().getEmail()