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

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

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

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

Q&A

1回答

3734閲覧

GAS:メール本文に表示される引用の日付をシートの表示通りにさせたい。

kassie

総合スコア13

Google Apps Script

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

0グッド

1クリップ

投稿2019/08/29 04:07

編集2022/01/12 10:55

前提・実現したいこと

スプレッドシートにあるリストからメールを送信するようにしています。

スプレッドシートは顧客リスト、件名、請求月、期日があります
本文は別のグーグルドキュメントから引っ張っています。

メール送信はできるのですが(受信者が指定されていませんエラーがなぜか表示されますが、テストで受信確認済み。。)
日付表示箇所がThu Aug 29 2019 00:00:00 GMT+0900 (JST)
となってしまいます。。
請求月は=TODAYを月表示
期日はカレンダーで選択としています。

初心者で恐れ入りますが、ご教授いただければ幸いです。

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

日付表示箇所がThu Aug 29 2019 00:00:00 GMT+0900 (JST)
function myFunction() { var mailpass=Browser.inputBox("パスを入力してください",Browser.Buttons.OK_CANCEL); /* パスワード設定 */ if(mailpass=="test"){ /* スプレッドシートのシートを取得と準備 */ var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var rowSheet=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 /* ドキュメント「メール本文テスト」を取得する */ var docTest=DocumentApp.openById("xxxxxxxxxxxxxxxxxxxxxxxxxx"); //ドキュメントをIDで取得 var strDoc=docTest.getBody().getText(); //ドキュメントの内容を取得 /* シートの全ての行について会社名担当者名を差し込みログに表示*/ for(var i=2;i<=rowSheet;i++){ var strEmail=mySheet.getRange(i,2).getValue(); //email var strkaisha=mySheet.getRange(i,3).getValue(); //会社名 var strtantou=mySheet.getRange(i,4).getValue(); //担当者名 var strpaymentmonth=mySheet.getRange(i,6).getValue(); //請求月 var strpaymentdate=mySheet.getRange(i,7).getValue(); //支払期日 var strBody=strDoc.replace(/{会社名}/g,strkaisha).replace(/{担当者名}/g,strtantou).replace(/{請求月}/g,strpaymentmonth).replace(/{支払期日}/g,strpaymentdate); /* メール表題、fromアドレス、差出人名を準備 */ var strSubject = mySheet.getRange(i,5).getValue(); // メールタイトル var strFrom= mySheet.getRange(2,11).getValue(); //From var strSender= mySheet.getRange(3,11).getValue(); //差出人 /* メールを送信 */ GmailApp.sendEmail( strEmail, //toアドレス strSubject, //メールタイトル strBody, //本文 { from: strFrom, //fromアドレス name: strSender //差出人 } ); } Browser.msgBox("送信が完了しました"); } else{ Browser.msgBox("passが違います"); } }

試したこと

ここに問題に対して試したことを記載してください。

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

↓シート側のF列G列どおりに表示させたいです。F列は=TODAYが入ってます。
ここにより詳細な情報を記載してください。

↓G列はカレンダーで日付選択してます。
イメージ説明

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

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

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

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

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

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

yamap55

2019/08/29 04:16

「日付表示箇所」とは何でしょうか?
kassie

2019/08/29 04:21

メール本文にある個所です 以下 ~~~ Thu Aug 29 2019 00:00:00 GMT+0900 (JST)に、ご請求書を発送させていただいております。 支払期日はThu Aug 29 2019 00:00:00 GMT+0900 (JST)となりますため事前にご案内させていただきます。 ~~~ とメール文には日付が上記表示になってしまいます。初心者のため勉強不足で申し訳ありません。
guest

回答1

0

以下のコードで日付から文字列に変換できます。

javascript

1Utilities.formatDate(target_date, "JST", "yyyy/MM/dd");

ドキュメント↓
https://developers.google.com/apps-script/reference/utilities/utilities#formatDate(Date,String,String)

※本題とはズレますが、getValue()で1セル事取得するのは効率が悪いので、forの前にgetValuesで範囲指定して配列で取得してしまった方が良いかと思います。


追記への回答1

元のコードをそのまま活かすと↓のようになるかと思います。

javascript

1var strpaymentmonth=Utilities.formatDate(mySheet.getRange(i,6).getValue(), "JST", "yyyy/MM/dd"); //請求月 2var strpaymentdate=Utilities.formatDate(mySheet.getRange(i,7).getValue(), "JST", "yyyy/MM/dd"); //支払期日

追記への回答2

空の場合があるようですが、その場合どのようにすればよいか仕様がわからないので、とりあえず値をそのまま出力するようにしました。

javascript

1var strpaymentmonth=mySheet.getRange(i,6).getValue(); //請求月 2if (strpaymentmonth) { 3 strpaymentmonth = Utilities.formatDate(strpaymentmonth, "JST", "yyyy/MM/dd"); 4} 5var strpaymentdate=mySheet.getRange(i,7).getValue(); //支払期日 6if (strpaymentdate) { 7 strpaymentdate = Utilities.formatDate(strpaymentdate, "JST", "yyyy/MM/dd"); 8}

投稿2019/08/29 04:27

編集2019/08/29 06:52
yamap55

総合スコア1376

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

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

kassie

2019/08/29 04:33

すいません、超初心者なのですいませんが、Utilities.formatDate(target_date, "JST", "yyyy/MM/dd");をどこにいれればいいのでしょう。。。
kassie

2019/08/29 04:53

ありがとうございます。 早速試したのですがvar strpaymentmonth=Utilities.formatDate(mySheet.getRange(i,6).getValue(), "JST", "yyyy/MM/dd"); //請求月で メソッド formatDate(string,string,string) が見つかりません。 とのエラーになってしまいました。。
yamap55

2019/08/29 05:17

そのエラーは1つ目の値が文字列なので発生しています。(日付型を想定している) 文字列に変換したい値は「請求月」と「支払期日」で良かったですよね??請求月は不要ならば支払期日のみ変換してください。
kassie

2019/08/29 05:22

変換したい値は「請求月」と「支払期日」です!
yamap55

2019/08/29 05:28 編集

以下を実行すると何が表示されますでしょうか?(実行後、ctrl + enterで確認できます。) var strpaymentmonth=mySheet.getRange(i,6).getValue(); //請求月 Logger.log(strpaymentmonth) Logger.log(typeof strpaymentmonth)
kassie

2019/08/29 05:29

支払月のみ var strpaymentdate=Utilities.formatDate(mySheet.getRange(i,7).getValue(), "JST", "yyyy/MM/dd"); //支払期日としてもこの行で同様のエラーが出ました。すいません、、、
kassie

2019/08/29 05:30

[19-08-29 14:30:06:103 JST] Thu Aug 29 00:00:00 GMT+09:00 2019 [19-08-29 14:30:06:103 JST] object [19-08-29 14:30:06:370 JST] [19-08-29 14:30:06:370 JST] string となります。
yamap55

2019/08/29 05:36

Logger.logは2つしかないので、2行しか出力されないはずなのですが。。。
yamap55

2019/08/29 05:37

請求月が「Thu Aug 29 00:00:00 GMT+09:00 2019」と「object」で、支払期限が「」と「string」という事でしょうか??
kassie

2019/08/29 05:42

var strEmail=mySheet.getRange(i,2).getValue(); //email var strkaisha=mySheet.getRange(i,3).getValue(); //会社名 var strtantou=mySheet.getRange(i,4).getValue(); //担当者名 var strpaymentmonth=mySheet.getRange(i,6).getValue(); //請求月 Logger.log(strpaymentmonth) Logger.log(typeof strpaymentmonth) var strpaymentdate=mySheet.getRange(i,7).getValue(); //支払期日 にして実行したあとログで [19-08-28 22:41:12:422 PDT] Thu Aug 29 00:00:00 GMT+09:00 2019 [19-08-28 22:41:12:422 PDT] object [19-08-28 22:41:12:953 PDT] [19-08-28 22:41:12:953 PDT] string とでます。。
yamap55

2019/08/29 06:23

以下でわかりやすく出力してみましょう。 var strpaymentmonth=mySheet.getRange(i,6).getValue(); //請求月 Logger.log("strpaymentmonth : " + strpaymentmonth); Logger.log("strpaymentmonth : " + typeof strpaymentmonth); var strpaymentdate=mySheet.getRange(i,7).getValue(); //支払期日 Logger.log("strpaymentdate : " + strpaymentdate); Logger.log("strpaymentdate : " + typeof strpaymentdate); また、データがおかしい気もしますので、データ(スプレッドシートに記載されている請求月、支払期日の値 or キャプチャを「質問」の方に記載お願いします。)
kassie

2019/08/29 06:42

ご丁寧にありがとうございます。 シートの対象部位画像を補足情報に追加いたしました。 また、 var strpaymentmonth=mySheet.getRange(i,6).getValue(); //請求月 Logger.log("strpaymentmonth : " + strpaymentmonth); Logger.log("strpaymentmonth : " + typeof strpaymentmonth); var strpaymentdate=mySheet.getRange(i,7).getValue(); //支払期日 Logger.log("strpaymentdate : " + strpaymentdate); Logger.log("strpaymentdate : " + typeof strpaymentdate); では以下のログが表示されます。 [19-08-29 15:29:56:136 JST] strpaymentmonth : Thu Aug 29 2019 00:00:00 GMT+0900 (JST) [19-08-29 15:29:56:136 JST] strpaymentmonth : object [19-08-29 15:29:56:137 JST] strpaymentdate : Thu Aug 29 2019 00:00:00 GMT+0900 (JST) [19-08-29 15:29:56:137 JST] strpaymentdate : object [19-08-29 15:29:56:440 JST] strpaymentmonth : [19-08-29 15:29:56:441 JST] strpaymentmonth : string [19-08-29 15:29:56:442 JST] strpaymentdate : [19-08-29 15:29:56:442 JST] strpaymentdate : string
yamap55

2019/08/29 06:54

空の場合があるようですね。空の場合どうすればよいかわからないので、とりあえずそのまま出力するように回答致しました。 実際にはそのままメールを送信するわけにはいかないと思うので、エラーにするなりなんなりする必要があるかと思います。 また、そもそも一行多く取れてしまっているという事であれば、emaillなども空になると思いますのでlastrowをうまくとるようにすれば良いのではないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問