2016-10-17 1 views
0

Сценарий работает так, как я хочу, я его не развивал, я забыл сайт автора, извините, если я не упоминаю его/нее.Как отправить электронное письмо с помощью PDF через скрипт внутри электронных таблиц google?

Большая проблема в том, что я не могу или не могу понять, как я могу отправить электронное письмо с PDF-файлом, созданным с помощью скрипта, я не хочу отправлять его в формате Zip, и если вы отпустите, файл PDF name's изменить каждый раз, когда вы используете электронную таблицу, здесь я оставляю код:

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); 

    } 

ответ

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('[email protected]', 'Attachment example', 'Two files are attached.', { 
    name: 'Automatic Emailer Script', 
    attachments: [file.getAs(MimeType.PDF), blob] 
}); 

решение, данное в этой SO post также может помочь.

+0

Привет, ну, я не могу получить файл по идентификатору, так как это PDF-файл, созданный как раз в тот момент, запускает скрипт, и это делает имя Diferent файла каждый раз, когда скрипт выполняется из параметров, приведенных в построении файла, плюс функция getAs отправляет мне сообщение об ошибке. «can't find function getAs ...» – Pepe

+0

Привет, я уже решу проблему, поскольку я подозревал, что я отправлял по электронной почте только имя файла, но без содержимого, поэтому вот var, который я создал при создании папки: var archivo = docurl.getBlob(). GetAs ('application/pdf'). GetBytes(); – Pepe

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); 

} 
Смежные вопросы