2016-05-14 15 views
0

[email protected] Nachdem ich eine Weile damit zu kämpfen habe, rufe ich um Hilfe von der Menge.E-Mail Google Doc als PDF-Anhang

Ich versuche, 2 Google Docs als PDF an eine E-Mail anzuhängen. Ich sehe viele Beispiele in Bezug auf Google Tabellen und war erfolgreich in der Lage, Kopien von Tabellen als PDF per E-Mail zu versenden, aber ich konnte dies nicht an Google Docs übertragen.

In mehreren verschiedenen Szenarien sind die PDF-Anhänge entweder eine Kopie meiner original template Doc oder eine Bilderfassung von "One Account. All of Google" sign in page. Wenn ich die erzeugten Links (Logger.log) anschaue und sie verwende, wird eine Kopie von the correct Doc heruntergeladen.

Unten ist ein Beispiel für mein Szenario, in dem ich versuche, die E-Mail-Anhänge zu erstellen. Siehe Funktion emailDocAsPDF() nach unten

Vielen Dank im Voraus für eine Anleitung zu diesem Thema.

function myFunctionUpdated() { 

    var testTemplateId = searchDriveFile('Test Template'); 
    Logger.log('test template id = ' + testTemplateId); 

    var fileName = 'Copy of Test Template' 
    Logger.log(fileName); 

    DriveApp.getFileById(testTemplateId).makeCopy(fileName); 

    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var range = ss.getRange(1, 1, 3, 2).getValues(); 

    var copyNewTemplateId = searchDriveFile(fileName); 

    var copyTemplate = DocumentApp.openById(copyNewTemplateId); 
    var copyTemplateBody = copyTemplate.getBody().editAsText(); 

    for (i=0; i<range.length; i++) { 
     copyTemplateBody.replaceText(range[i][0], range[i][1]); 
    } 

    copyTemplate.saveAndClose(); 

    emailDocAsPDF(fileName) 
} 


// Searched Google Drive for a file name and returns the file ID. 
function searchDriveFile(fileName) { 
    var files = DriveApp.searchFiles(
    'title = "'+ fileName +'"'); 
    while (files.hasNext()) { 
    var file = files.next(); 
    var id = file.getId(); 
    return id; 
    } 
} 


// Send document in an email as PDF 
function emailDocAsPDF(fileName) { 

    var staticDoc = 'FILE-ID'; 

    var attachmentDoc = UrlFetchApp.fetch("https://docs.google.com/document/d/" + copyTemplateId + "/export?format=pdf"); 
    Logger.log("https://docs.google.com/document/d/" + copyTemplateId + "/export?format=pdf"); 

    var attachmentStaticDoc = UrlFetchApp.fetch("https://docs.google.com/document/d/" + staticDoc + "/export?format=pdf"); 
    Logger.log("https://docs.google.com/document/d/" + staticDoc + "/export?format=pdf"); 

    var fileBlob = []; 

    fileBlob[0] = attachmentDoc.getBlob().getAs('application/pdf'); 
    fileBlob[1] = attachmentStaticDoc.getBlob().getAs('application/pdf'); 

    var body = "Bird is the WORD!! <br>" + 
    "<a href='http://www.example.com'>Visit Example</a>"; 

    if (MailApp.getRemainingDailyQuota() > 0) 
    GmailApp.sendEmail("[email protected]", "Test Documents Email", body, { 
     htmlBody: body, 
     attachments:[fileBlob[0],fileBlob[1]]  
    }); 

} 

EDIT - Erfolgreiche Updates mit Code von Sandwich zur Verfügung gestellt.

// Send document in an email as PDF 
function emailDocAsPDF(fileName) { 

    var staticDoc = 'FILE-ID'; 

    var copyTemplateId = searchDriveFile(fileName); 

    var blobs = []; 

    var doc = DriveApp.getFileById(copyTemplateId); 
    blobs[0] = doc.getBlob().getAs('application/pdf').setName('MyAttachment1.pdf'); 

    var doc = DriveApp.getFileById(staticDoc); 
    blobs[1] = doc.getBlob().getAs('application/pdf').setName('MyAttachment2.pdf'); 

    var zipBlob = Utilities.zip(blobs).setName('Documents.zip'); 

    var recipient = '[email protected]'; 
    var subject = 'Test Email'; 
    var body = 'Bird is the WORD'; 
    MailApp.sendEmail(recipient, subject, body, {attachments: [zipBlob]}); 
} 
+0

Auch habe ich vergessen zu erwähnen, dass 'copyTemplate.saveAndClose();' wurde benötigt, nachdem Aktualisierungen für das Vorlagen-Dokument vorgenommen wurden. Dadurch konnte ich das aktualisierte Dokument per E-Mail versenden. – onerockscott

Antwort

0

Um jede Art von Dokument als PDF anhängen, rufen getBlob auf die Datei, geben Sie Inhaltstyp wie bei .getAs('application/pdf') und optional einen Namen mit setName eingestellt. Das ist alles:

var doc = DriveApp.getFileById('ID_HERE'); 
var blob = doc.getBlob().getAs('application/pdf').setName('MyAttachment.pdf'); 
var recipient = '[email protected]'; 
var subject = 'Email subject'; 
var body = 'Text here'; 
MailApp.sendEmail(recipient, subject, body, {attachments: [blob]}); 

Sie versuchten, „Export als PDF via URL Abfrage“ zu verwenden, die eine schlecht dokumentierte Funktion, die für Sheets (Festlegung der Grenzen der exportierten Region) manchmal nützlich ist, aber es ist nicht notwendig, Text & Tabellen wenn es für sie existiert. Die obige Methode sollte für jede Art von Inhalt funktionieren, der in Google Drive gespeichert ist.

Übrigens ist es vorzuziehen, beim Senden von E-Mails MailApp anstelle von GmailApp zu verwenden, da es die Berechtigungsebene auf das beschränkt, was Sie brauchen: E-Mails senden. Mit GmailApp erhält das Skript außerdem die Berechtigung zum Zugriff auf alle vorhandenen E-Mails und zum Löschen aller vorhandenen E-Mails, was für Skripts, die aus Versuchs-, Fehler- und Kopiercode aus dem Internet bestehen, nicht ratsam ist.

+0

Vielen Dank für Ihre Hilfe bei der E-Mail-Bearbeitung von Google Docs und Ihren Ratschlägen zu 'MailApp' /' GmailApp'. Alles funktioniert jetzt perfekt! – onerockscott

Verwandte Themen