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

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

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

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

Q&A

解決済

1回答

2154閲覧

GASでGoogle ドキュメントの本文書き換え後、odt形式に変換したい

sksgt

総合スコア13

Google Apps Script

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

0グッド

1クリップ

投稿2019/03/15 03:00

前提・実現したいこと

Google Apps Scriptを使用し、以下の動作を行いたいと考えています。
1.あらかじめGoogleドキュメントで準備しておいた報告書テンプレートを複製する。
2.複製したファイル本文のテンプレ文言(日付等)を書き換える。
3.複製ファイルをodtに変換する。
4.当該odtファイルを添付し、メール下書きを作成する。

その際、後述のスクリプトを実行すると、4の工程において添付されるodtファイル本文が、2の書き換えが反映されていないテンプレートのままになってしまいます。
書き換え後のodtファイルを添付するにはどうすればよいでしょうか。

なお、エラーメッセージは表示されず、最後まで動作はします。

該当のソースコード

Google

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すると、書き換えられていないテンプレートままのファイルが保存されます。

知識が至らず恐縮ですが、お知恵をお貸しいただければ幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Spreadsheetで似た状況で、SpreadsheetApp.flush()で対応した経験から。

javascript

1var doc = DocumentApp.openById(fileID); 2var body = doc.getBody() 3body.replaceText('ドキュメント内のテンプレート文言', '置き換え後の文言'); 4doc.saveAndClose(); //これ

でどうでしょうか?

投稿2019/03/15 03:28

papinianus

総合スコア12705

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

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

sksgt

2019/03/15 03:46

「ファイル複製・書き換え」の段落の下2行をご教示いただいたコードに置き換え、無事解決いたしました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問