如何通过谷歌电子表格中的脚本发送带有PDF的电子邮件?

时间:2016-10-17 22:33:20

标签: javascript pdf google-spreadsheet-api

脚本只是按照我的意愿运行,我没有开发它,我忘记了作者的网站,对不起,如果我不提及他/她。

最大的问题是我无法或我无法弄清楚如何发送包含通过脚本创建的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);

  }

2 个答案:

答案 0 :(得分:0)

使用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]
 });

SO post中给出的解决方案也可能有所帮助。

答案 1 :(得分:0)

正如我所怀疑的那样,我只通过电子邮件发送文件名但没有内容,所以我在文件夹创建下对var做了一点变化: var archivo = docurl.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);

}