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

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

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

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

Q&A

解決済

1回答

1457閲覧

GASでスプレッドシートをメールに添付した際に更新箇所が反映されていない

Sinnku

総合スコア1

Google Apps Script

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

0グッド

1クリップ

投稿2021/04/27 13:20

前提・実現したいこと

Webフォームで入力した内容をスプレッドシートに反映し、そのシートをExcelに変換してメールに添付して送信するスクリプトを作成しています。

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

フォームでの入力内容はテンプレートとなるスプレッドシートをコピーしたファイルに入力していますが、メールの送信先で添付ファイルを見ると入力内容が反映されていません。 実際にコピーして生成されたファイルには値が入力されており、また下記ソースコードの「//エクスポート用のURL生成」部分で生成されたURLを直接ブラウザに入力すると値が入力されているファイルがダウンロードできます。 添付されたファイルと実際のファイルでこのような乖離が発生してしまう原因はどういったことが考えられますでしょうか?

該当のソースコード

GoogleAppsScript

1function doPost(e){ 2 3 // 書き込み対象ファイルのID取得 4 var fileID = editExcel(e.parameters); 5 6 // 書き込み対象ファイルのコピーおよび記入 7 var copiedFileId = sheetCopy(e.parameters,fileID); 8 9 //添付するExcelファイルの名称 10 var xlsxName = LEAD_FILENAME + e.parameters.fromDep + "_" + e.parameters.fromName + "_" + Utilities.formatDate(new Date, "Asia/Tokyo", "yyyyMMdd") + END_FILENAME 11 12 //エクスポート用のURL生成 13 var fetchUrl = "https://docs.google.com/feeds/download/spreadsheets/Export?key=" + copiedFileId + "&exportFormat=xlsx"; 14 15 //OAuth2対応 16 var fetchOpt = { 17 "headers" : { Authorization: "Bearer " + ScriptApp.getOAuthToken() }, 18 "muteHttpExceptions" : true 19 }; 20 21 //URLをダウンロード 22 var xlsxFile = UrlFetchApp.fetch(fetchUrl, fetchOpt).getBlob().setName(xlsxName) 23 24 // メールフォーマットの作成 25 var m = createMailFormat(e.parameters,fetchUrl); 26 27 // メール送信 28 MailApp.sendEmail("" + m.recipient + "", m.subject, m.body,{cc:"" + e.parameters.fromAdd + "",replyTo:"" + e.parameters.fromAdd + "",attachments:[xlsxFile]}); 29 30 // 結果ページへの遷移 31 var resultpage=HtmlService.createTemplateFromFile("result"); 32 return resultpage.evaluate(); 33 34} 35 36 37function sheetCopy(param,fileId) { 38 var templateFile = DriveApp.getFileById(fileId); 39 var OutputFolder = DriveApp.getFolderById(COPY_DRIVE_ID); 40 var OutputFileName = templateFile.getName().replace('dep_name_yyyymmdd_nn','') + param.fromDep + '_' + param.fromName + '_' + Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyyMMddhhss'); 41 42 var CopiedFile = templateFile.makeCopy(OutputFileName, OutputFolder); 43 44 var CopiedFileId = CopiedFile.getId(); 45 46 var sh1 = SpreadsheetApp.openById(CopiedFileId); 47 var sheet1 = sh1.getSheetByName('Card') 48 49 // 受信者情報の入力 50 sheet1.getRange(16,9).setValue(param.toCom); 51 sheet1.getRange(16,12).setValue(param.toDep); 52 sheet1.getRange(17,9).setValue(param.toName); 53 sheet1.getRange(18,9).setValue(param.toAdd); 54 55 // 送信者情報の入力 56 sheet1.getRange(20,9).setValue(param.fromCom); 57 sheet1.getRange(20,12).setValue(param.fromDep); 58 sheet1.getRange(21,9).setValue(param.fromName); 59 60 // 送信日の入力 61 sheet1.getRange(23,9).setValue(Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd")); 62 63 // メッセージの入力 64 sheet1.getRange(26,3).setValue(param.message); 65 66 return(CopiedFileId); 67} 68

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

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

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

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

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

guest

回答1

0

ベストアンサー

プログラムにより変更した内容が確定される前に送信しているからではないでしょうか。

sheetCopyの関数のreturn(CopiedFileId);の前に

SpreadsheetApp.flush();

を入れては如何でしょうか。

投稿2021/04/27 20:57

編集2021/04/27 20:58
xail2222

総合スコア1508

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

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

Sinnku

2021/04/28 01:22

ご回答いただきありがとうございます! ご教示いただいた方法にて解決しました! 大変助かりましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問