前提・実現したいこと
Google Apps Scriptを使用し、以下の動作を行いたいと考えています。
1.あらかじめGoogleドキュメントで準備しておいた報告書テンプレートを複製する。
2.複製したファイル本文のテンプレ文言(日付等)を書き換える。
3.複製ファイルをodtに変換する。
4.当該odtファイルを添付し、メール下書きを作成する。
その際、後述のスクリプトを実行すると、4の工程において添付されるodtファイル本文が、2の書き換えが反映されていないテンプレートのままになってしまいます。
書き換え後のodtファイルを添付するにはどうすればよいでしょうか。
なお、エラーメッセージは表示されず、最後まで動作はします。
該当のソースコード
1function myFunction() { 2 3 //ファイル複製・書き換え 4 var folder = DriveApp.getFolderById('フォルダID'); 5 var copyfile = DriveApp.getFileById('テンプレートのファイルID').makeCopy('コピー後ドキュメントの名称',folder); 6 var fileID = copyfile.getId(); 7 var body = DocumentApp.openById(fileID).getBody(); 8 body.replaceText('ドキュメント内のテンプレート文言', '置き換え後の文言'); 9 10 //認証トークン 11 var fetchOpt = { 12 "headers" : { Authorization: 'Bearer ' + ScriptApp.getOAuthToken() }, 13 "muteHttpExceptions" : true 14 }; 15 16 //odtへ変換 17 var doctype = 'odt'; //pdf,docx,odt,txt 18 var fetchUrl = 'https://docs.google.com/a/' + 'ドメイン名' + '/document/export?format=' + doctype + "&id=" + fileID; 19 var newfile = UrlFetchApp.fetch(fetchUrl,fetchOpt).getBlob().setName('添付ファイル名称.' + doctype); 20 21 //メール添付 22 var myThreads = GmailApp.search('返信したいメールの件名', 0, 1); 23 var myMsgs = GmailApp.getMessagesForThreads(myThreads); 24 myMsgs[0][0].createDraftReply('メール本文',{attachments: [newfile]}); 25 26}
試したこと
- odt変換前の複製ファイル(Googleドキュメント)の本文は正しく書き換えられています。
- body.replaceText()後、Logger.log(body)を取ると、書き換えられたStringを取得できました。
- fetchUrlの定義にて代入されているfileIDは、テンプレートのIDではなく複製後のIDが取得できていることをログを取って確認しています。
- fetchUrlで定義しているURLに、ドメイン名とfileIDを直接打ち込んでアクセスすると、書き換え後のodtファイルがダウンロードできました。
- 取得したBlobでodtファイルをメール添付ではなくcreateFileすると、書き換えられていないテンプレートままのファイルが保存されます。
知識が至らず恐縮ですが、お知恵をお貸しいただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/15 03:46