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

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

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

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

Q&A

解決済

3回答

3326閲覧

GASで自動返信メールを送る際に日時を日本語で表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

0グッド

1クリップ

投稿2020/03/16 02:46

GASで自動返信メールを送る際に日時を日本語で表示したい

お世話になります。
GASで自動返信メールを設定していますが
タイムスタンプの日付について下記の表示になっているところを
日本語に表示したいです。
過去の履歴を参考にしましたが、初心者のためわからず困っております。
どなたか御指南お願いいたします。

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

Mon Mar 16 2020 10:18:48 GMT+0900 (日本標準時)

このように表示したい

2020年3月16日 10:18:48

以下現在の内容です

function sendMailGoogleForm() { Logger.log('sendMailGoogleForm() debug start'); //------------------------------------------------------------ // 設定エリアここから //------------------------------------------------------------ // 件名、本文、フッター var subject = "【自動返信メール】受付完了"; var body = "この度は、*********の\n" + "******にお申込みいただきありがとうございました。\n" + "以下の内容にて受付を完了いたしましたのでご連絡いたします。\n" + "------------------------------------------------------------\n"; var footer = "------------------------------------------------------------\n" + "内容を確認し、ご連絡いたします。\n" + "〇〇事務局\n\n"; // 入力カラム名の指定 var NAME_COL_NAME = '名前'; var MAIL_COL_NAME = 'メールアドレス'; // メール送信先 var admin_name ="〇〇事務局";//送信メールの名前 var admin = "hogehoge@gmail.com"; // 先程作成したアドレスに書換 var bcc = admin;// bccがいらない場合は、adminを""に書換 var reply = admin; var to = ""; // To: (入力者のアドレスが自動で入ります) // 送信先オプション var options = {}; if ( admin_name ) options.name = admin_name; if ( bcc ) options.bcc = bcc; if ( reply ) options.replyTo = reply; //------------------------------------------------------------ // 設定エリアここまで //------------------------------------------------------------ try{ // スプレッドシートの操作 var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getLastRow(); var cols = sheet.getLastColumn(); var rg = sheet.getDataRange(); Logger.log("rows="+rows+" cols="+cols); // メール件名・本文作成と送信先メールアドレス取得 for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); // カラム名 var col_value = rg.getCell(rows, i).getValue(); // 入力値 body += "【"+col_name+"】\n"; body += col_value + "\n\n"; if ( col_name === NAME_COL_NAME ) { body = col_value+" 様\n\n"+body; } if ( col_name === MAIL_COL_NAME ) { to = col_value; } } body += footer; // メール送信 if ( to ) { /* メールを送信 */ GmailApp.sendEmail( to, //toアドレス subject, //表題 body, //本文 { from: admin, //fromアドレス name: admin_name //差出人 } ); }else{ MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body); } }catch(e){ MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message); } }

試したこと

過去の履歴等確認しましたが、記述方法がわかりませんでした。

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

###解決しました

下記の内容を追記して解決しました。

// メール件名・本文作成と送信先メールアドレス取得 for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); // カラム名 var col_value = rg.getCell(rows, i).getValue(); // 入力値 // 日付のフォーマットを指定。 if (col_name === 'お申込み日時' && col_value != '') { // 2020/03/16 col_value = Utilities.formatDate(col_value, 'Asia/Tokyo', "YYYY'年'MM'月'dd'日'HH'時'mm'分'ss'秒'"); } body += "【"+col_name+"】\n"; body += col_value + "\n\n"; if ( col_name === NAME_COL_NAME ) { body = col_value+" 様\n\n"+body; } if ( col_name === MAIL_COL_NAME ) { to = col_value; } } body += footer;

投稿2020/03/16 04:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

その後、「タイムスタンプ」→「お申込み日時」の変更が上手く機能していなかったので
下記のとおり修正し、今のところ正常に機能しています。

function sendMailGoogleForm() { Logger.log('sendMailGoogleForm() debug start'); //------------------------------------------------------------ // 設定エリアここから //------------------------------------------------------------ // 件名、本文、フッター var subject = "【自動返信メール】受付完了"; var body = "この度は、*********の\n" + "******にお申込みいただきありがとうございました。\n" + "以下の内容にて受付を完了いたしましたのでご連絡いたします。\n" + "------------------------------------------------------------\n"; var footer = "------------------------------------------------------------\n" + "内容を確認し、ご連絡いたします。\n" + "〇〇事務局\n\n"; // 入力カラム名の指定 var NAME_COL_NAME = '名前'; var MAIL_COL_NAME = 'メールアドレス'; var TIMESTAMP_LABEL = 'タイムスタンプ'; // メール送信先 var admin_name ="〇〇事務局";//送信メールの名前 var admin = "hogehoge@gmail.com"; // 先程作成したアドレスに書換 var bcc = admin;// bccがいらない場合は、adminを""に書換 var reply = admin; var to = ""; // To: (入力者のアドレスが自動で入ります) // 送信先オプション var options = {}; if ( admin_name ) options.name = admin_name; if ( bcc ) options.bcc = bcc; if ( reply ) options.replyTo = reply; //------------------------------------------------------------ // 設定エリアここまで //------------------------------------------------------------ try{ // スプレッドシートの操作 var sheet = SpreadsheetApp.getActiveSheet(); var rows = sheet.getLastRow(); var cols = sheet.getLastColumn(); var rg = sheet.getDataRange(); Logger.log("rows="+rows+" cols="+cols); // メール件名・本文作成と送信先メールアドレス取得 for (var i = 1; i <= cols; i++ ) { var col_name = rg.getCell(1, i).getValue(); // カラム名 var col_value = rg.getCell(rows, i).getValue(); // 入力値 // 日付のフォーマットを指定 if ( col_name === TIMESTAMP_LABEL && col_value != ''){ //タイムスタンプ⇒お申込み日時 col_name = 'お申込み日時'; col_value = Utilities.formatDate(col_value, 'Asia/Tokyo', "YYYY'年'MM'月'dd'日'HH'時'mm'分'ss'秒'"); } body += "【"+col_name+"】\n"; body += col_value + "\n\n"; if ( col_name === NAME_COL_NAME ) { body = col_value+" 様\n\n"+body; } if ( col_name === MAIL_COL_NAME ) { to = col_value; } } body += footer; // メール送信 if ( to ) { /* メールを送信 */ GmailApp.sendEmail( to, //toアドレス subject, //表題 body, //本文 { from: admin, //fromアドレス name: admin_name //差出人 } ); }else{ MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body); } }catch(e){ MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message); } }

投稿2021/09/15 00:14

編集2021/09/15 02:31
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

どこで日付を取得しているかいまいちわからなかったのですが、おそらくDate型と判断してお答えします。

Date型の変換にはdate.toLocaleString()を利用してください。

質問者さんの欲しい感じだとこんな感じですかね。V8エンジンの方で動作させるなら.replace(/ JST/,'')は不要です。

js

1function dateToString(date){ 2 return date.toLocaleString().replace(/(\d{4}).(\d{1,2}).(\d{1,2})/,'$1年$2月$3日').replace(/ JST/,''); 3}

Logger.log(dateToString(new Date()) )で挙動を確認してみてください。


コメントを受けて追記:え〜……。

コードはスプレッドシートを参照しているのでGoogleFormsだけの自動返信ではないはずです。

乱暴な解決策になりますが、コードの可読性を度外視するなら以下のことを試してください。

  • 以下のコードの1行を書き換える

js

1var col_value = rg.getCell(rows, i).getValue(); // 入力値

↑を↓に書き換える

js

1var col_value = dateToString(rg.getCell(rows, i).getValue());
  • 以下のコードをコード全体の下か上に追加する

js

1function dateToString(date){ 2 var toString = Object.prototype.toString 3 if(!toString.call(date).match(/Date/)) return date; 4 return date.toLocaleString().replace(/(\d{4}).(\d{1,2}).(\d{1,2})/,'$1年$2月$3日').replace(/ JST/,''); 5}

たぶん、日付は変更されると思います。

投稿2020/03/16 03:32

編集2020/03/16 04:22
tsurugi

総合スコア89

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

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

退会済みユーザー

退会済みユーザー

2020/03/16 03:59

tsurugi 様 おせわになっております。 googleformの自動返信メールを作成しており、日付はどこで取得しているか、私にもわかりません。
退会済みユーザー

退会済みユーザー

2020/03/16 04:20

tsurugi 様 参考に色々試しましたが、やはり日付が日本語になりませんでした。 もう少し他の方法を探してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問