如何通过谷歌电子表格内的脚本发送PDF电子邮件

How to send an email with a PDF through a script inside google spreadsheets?

本文关键字:PDF 电子邮件 脚本 何通过 谷歌 电子表格      更新时间:2023-09-26

脚本就像我想要的那样工作,我没有开发它,我忘记了作者的网站,对不起,如果我没有提到他/她。

最大的问题是,我无法或我无法弄清楚如何通过脚本创建的PDF发送电子邮件,我不想以Zip格式发送,如果您发布,PDF文件名每次使用电子表格时都会更改,这里我留下代码:

    function spreadsheetToPDF(){
  var key = '1hBbCnmca_wx4wbQx93Vf4d9cfUwGbFSP9hKgv9Qu7Vk';  //docid
  var index = 0;  //sheet gid / number

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ActiveSheet = ss.getSheetByName('Sheet 1');
  var timestamp = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'-'HHmm");
  var plainonum = ActiveSheet.getRange("C5").getValue();  //order number
  var supp_name = ActiveSheet.getRange("C12").getValue();  //supplier
  var onum = ('0000' + plainonum ).slice(-4);  //sets leading zeros to order number
  var description = ActiveSheet.getRange("C18").getValue();  //description
  var email = ActiveSheet.getRange("D1").getValue(); //email
  var name = 'Order-' + onum +'-' + supp_name + '-' + description + '-' + timestamp + '.pdf';  //makes pdf filename

  SpreadsheetApp.flush();  //ensures everything on spreadsheet is "done"
  //make the pdf from the sheet
  var theurl = 'https://docs.google.com/spreadsheets/d/'
  + key 
  + '/export?exportFormat=pdf&format=pdf'
  + '&notes=false'
  + '&size=letter'
  + '&portrait=true'
  + '&fitw=true'       // fit to width, false for actual size
  + '&sheetnames=false&printtitle=false&pagenumbers=false'
  + '&gridlines=false'
  + '&fzr=false'      // do not repeat frozen rows on each page
  + '&gid='
  + index;       //the sheet's Id
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(theurl, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdf = docurl.getBlob().setName(name).getAs('application/pdf');

  //save the file to folder on Drive
  var fid = '0B6iePPHdQRoxQVB3eERrb1c3MUE';
  var folder = DriveApp.getFolderById(fid);
  folder.createFile(pdf);
  var pfd = DriveApp.getFileById(pdf.getId()).getAs('application/pdf').getBytes();
  var attach = {fileName:name,content:pfd, mimeType:'application/pdf'};
  // Here I need to send the email
  // GmailApp.sendEmail(email, "The subject", "The body content") // AND The PDF File witch I can´t attach
  //Show a Popup with a message that a file was created inside a folder
  SpreadsheetApp.getUi().alert('New document created in' + ' ' + folder);
  }

使用DriveApp.getFolderById(id)从驱动器获取文件后,您可以使用MailApp.sendEmail(recipient, subject, body, options)将其作为附件发送。

下面是您可以尝试的示例代码:

// Send an email with two attachments: a file from Google Drive (as a PDF) and an HTML file.
 var file = DriveApp.getFileById('1234567890abcdefghijklmnopqrstuvwxyz');
 var blob = Utilities.newBlob('Insert any HTML content here', 'text/html', 'my_document.html');
 MailApp.sendEmail('mike@example.com', 'Attachment example', 'Two files are attached.', {
     name: 'Automatic Emailer Script',
     attachments: [file.getAs(MimeType.PDF), blob]
 });

这个帖子给出的解决方案可能也有帮助。

正如我所怀疑的,我只发送了文件的名称,而没有发送内容,所以我在文件夹创建下对var做了一点改动:var archive = doccurl . getblob ().getAs('application/pdf').getBytes();

// Create a PDF from the active sheet, save it under a specific directory and send the PDF by mail
  function spreadsheetToPDF(){
  var key = 'abcdefghijk1234567890';  //docid (actual spreadsheet)
  var index = 0;  //sheet gid / number

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ActiveSheet = ss.getSheetByName('Hoja 1');
  var timestamp = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd'-'HHmm");
  var plainonum = ActiveSheet.getRange("C5").getValue();  //order number
  var supp_name = ActiveSheet.getRange("C12").getValue();  //supplier
  var onum = ('0000' + plainonum ).slice(-4);  //sets leading zeros to order number
  var description = ActiveSheet.getRange("C18").getValue();  //description
  var correo = ActiveSheet.getRange("D1").getValue(); //correo electrónico
  var name = 'Order-' + onum +'-' + supp_name + '-' + description + '-' + timestamp + '.pdf';  //makes pdf filename

  SpreadsheetApp.flush();  //ensures everything on spreadsheet is "done"
  //make the pdf from the sheet
  var theurl = 'https://docs.google.com/spreadsheets/d/'
  + key 
  + '/export?exportFormat=pdf&format=pdf'
  + '&size=A4'
  + '&portrait=true'
  + '&fitw=true'       // fit to width, false for actual size
  + '&sheetnames=false&printtitle=false&pagenumbers=false'
  + '&gridlines=false'
  + '&fzr=false'      // do not repeat frozen rows on each page
  + '&gid='
  + index;       //the sheet's Id
  var token = ScriptApp.getOAuthToken();
  var docurl = UrlFetchApp.fetch(theurl, { headers: { 'Authorization': 'Bearer ' +  token } });
  var pdf = docurl.getBlob().setName(name).getAs('application/pdf');

  //save the file to folder on Drive
  var fid = 'abcdefghij1234567890';
  var folder = DriveApp.getFolderById(fid);
  folder.createFile(pdf);
  //get the file, name and content to send it by email
  var archivo = docurl.getBlob().getAs('application/pdf').getBytes(); 
  var attach = {fileName:name,content:archivo, mimeType:'application/pdf'};

  // Send email with the PDF attached
  GmailApp.sendEmail(correo, "The subject", "The body content", {attachments:[attach]});

  //Show a Popup with a message that a file was created inside a folder
  SpreadsheetApp.getUi().alert('Nuevo Documento creado en el folder' + ' ' + folder);
}