2016-05-14 4 views
0

[email protected]これでしばらくの間苦労して、私は群衆の助けを求めています。email Google Doc with PDF添付ファイル

2つのGoogleドキュメントを電子メールにPDFとして添付しようとしています。 Googleスプレッドシートに関する多くの例があり、PDFのシートのコピーをメールで送信できましたが、私はこれをDocsに移植できませんでした。

複数の異なるシナリオでは、PDF添付ファイルは、original template Docのコピーまたは"One Account. All of Google" sign in pageの画像キャプチャのいずれかです。生成されたリンク(Logger.log)を見て、それらを使用すると、the correct Docのコピーがダウンロードされます。

以下は、電子メールの添付ファイルを作成しようとしている私のシナリオの例です。関数emailDocAsPDF()を下に参照してください

この問題についてのご指摘をお寄せいただきありがとうございます。

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 - サンドイッチが提供するコードで成功したアップデート。

// 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

また、私は 'copyTemplate.saveAndClose(); 'テンプレートdocを更新した後に必要でした。これにより、更新された文書を電子メールで送信することができました。 – onerockscott

答えて

0

、PDFなどの文書のいずれかの種類を添付ファイルにgetBlobを呼び出し、.getAs('application/pdf')と同様に、コンテンツタイプを指定し、必要に応じてsetNameと名前を設定します。それはすべてです:

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

あなたはシート(エクスポートされた領域の境界を設定する)ために便利な場合があり不十分な文書化機能があり、「URLクエリを経由してPDFとしてエクスポート」を使用しようとしているが、ドキュメントには不要であるし、 、それらのために存在していても。上記の方法は、Googleドライブに保存されているあらゆる種類のコンテンツに対して有効です。

ちなみに、電子メールを送信するときはGmailAppの代わりにMailAppを使用することをお勧めします。これは、電子メールを送信することで必要な権限レベルを維持するためです。 GmailAppを使用すると、既存の電子メールにアクセスして削除するアクセス権もスクリプトに与えられます。インターネットから試用版、エラーコード、コピーコードで構成されたスクリプトではお勧めできません。

+0

ドキュメントを電子メールで送信し、 'MailApp' /' GmailApp'についてアドバイスをいただき、ありがとうございます。それは今すべて完璧に動作します! – onerockscott

関連する問題