質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

1810閲覧

GASで修正したdocumentのPDFを添付してメール送信したいが修正前documentのPDFが添付される

juju

総合スコア0

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2020/07/15 05:27

編集2020/07/15 07:24

前提・実現したいこと

GASでデータベースの内容を元に、ひな形に差込して作成したdocumentを
メールに添付して送信するスクリプトを作成しました
documentの作成、メール送信まではうまくいきましたが
添付されるpdfファイルに問題があります

発生している問題・エラーメッセージ

添付ファイルが当初ひな型をコピーして作成した差込前のdocumentのままPDFになり 差込後のdocumentが添付されません コピーを作成したフォルダには、差込が完了したdocumentが保存され 添付ファイルの名前は、新たに作成したファイルの名前になっています PDFになることは意図していることです

該当のソースコード

GAS

1function mailC() { 2 var SS = SpreadsheetApp.getActiveSpreadsheet();//データベースのスプレッドシート:list,work,table の3つのシートで構成 3 var S = SS.getSheetByName('list'); 4 5 var ui = SpreadsheetApp.getUi(); 6 var res = ui.prompt( 7 '☑した雇用契約書を作成、メール送信します', 8 '所属コード5桁を入力してください', 9 ui.ButtonSet.OK_CANCEL 10 ); 11 var CD = res.getResponseText(); 12 13//作業用シートに印刷する店舗のコードを渡す 14 var wsheet = SS.getSheetByName('work'); 15 wsheet.getRange('A1').setValue(CD); 16 var values = wsheet.getDataRange().getValues();  //印刷データを配列で取得 17 18//該当店舗のフォルダIDを取得 19 var tableS = SS.getSheetByName('table'); 20 var table = tableS.getDataRange().getValues(); 21 var cdtable = []; //所属コードの配列を作る 22 for (let i=1; i<table.length; i++){ 23 cdtable.push(table[i][2]); 24 } 25 var row = cdtable.indexOf(CD*1);   //所属コードの列番号を取得 26 27 var destination = table[row+1][3];   //該当店舗のフォルダID 28 var template = DriveApp.getFileById('*************'); //契約書ひな形 29 30// 契約書をコピーして店舗のフォルダに格納し、データを差込して保存 31 for (let i=1; i<values.length; i++){ 32 var name = Utilities.formatDate(new Date(), "JST", "yyyy-MM-dd-HHmm") +'_'+values[i][2]; 33 var cont = template.makeCopy(name, DriveApp.getFolderById(destination)); // 契約書をコピーしてフォルダに格納 34 var id_contdoc = cont.getId(); 35 var contdoc = DocumentApp.openById(id_contdoc); 36 var body = contdoc.getBody(); 37 38 body 39 .replaceText('{店舗名}',values[i][1]) 40 .replaceText('{氏名}',values[i][2]) 41 42//作成したファイルを添付してメール送信 43 var file = contdoc.getBlob(); //作成したファイルを取得 44 var body1 = ''; 45 body1 += values[i][2] + '様\n\n'; 46 body1 += 'おつかれさまです。\n'; 47 48 GmailApp.sendEmail( 49 values[i][25], '件名', body1, 50 { 51 attachments: file 52 } 53 ); 54} 55}

試したこと

1.//作成したファイルを添付してメール送信
var file = contdoc.getBlob(); //作成したファイルを取得
最初は、var file = DriveApp.getFileById(id_contdoc);としていましたが
これも同じ結果でした
2.以下の記事を参考に、差込部分を別な関数にして戻り値をBlobにしてみましたが
結果は同じでした
https://note.com/nepia_infinity/n/n829ed89a187a

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

juju

2020/07/15 07:03

仰るとおりです doc.saveAndClose(); をメール送信コードの前にいれたら、できました ありがとうございました
sawa

2020/07/15 07:05

そしたら、自分で回答入れて自己解決としてください。 さすがに他の方の回答をコピペするのは気がひけたので。
juju

2020/07/15 07:09

わかりました。 ありがとうございます
guest

回答1

0

自己解決

添付ファイルを取得する前に、documentを上書き保存することで解決しました

修正後のコード

//作成したファイルを添付してメール送信
contdoc.saveAndClose();      //←--追加
var file = contdoc.getBlob();

投稿2020/07/15 07:19

juju

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問