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

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

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

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

Q&A

1回答

1196閲覧

Googleドキュメントに差し込みした本文の中の日付と時刻の表記を、日本語の表記にすることはできますか?

pee.cyon.cyon

総合スコア12

Google Apps Script

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

1グッド

2クリップ

投稿2018/07/04 01:28

編集2018/07/10 00:35
超初心者のため、コードをコピー&ペーストしながら凌いでいます。 スプレッドシートから取得した「日付と時刻」を、Googleドキュメントに差し込みし、送信メールを送る際の日付と時刻の表記を日本語の表記に変更することは可能かどうか、ご教示願えないでしょうか。 ### 発生している問題・エラーメッセージ ただいま送信メールの本文に出ている表記 ↓↓↓ Thu Jul 05 2018 10:00:00 GMT+0900 (JST)~Thu Jul 05 2018 10:30:00 GMT+0900 (JST) 希望している表記 ↓↓↓ 2018年7月5日(木)10:00 ~ 2018年7月5日(木)10:30 ### 該当のソースコード function send_mail(){ /* スプレッドシートのシートを取得と準備 */ var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var rowSheet=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 /* ドキュメント「メール本文テスト」を取得する */ var docTest=DocumentApp.openById("----------"); //ドキュメントをIDで取得 var strDoc=docTest.getBody().getText(); //ドキュメントの内容を取得 /* メール表題、fromアドレス、差出人名を準備 */ var strSubject="●●●●●●●"; //表題 var strSender="■ ■ ■ ■"; //差出人 /* シートの全ての行について社名、姓名を差し込みログに表示*/ for(var i=2;i<=rowSheet;i++){ var strFirst=mySheet.getRange(i,4).getValue(); //学校名 var strSecond=mySheet.getRange(i,2).getValue(); //氏名 var strThird=mySheet.getRange(i,5).getValue(); //開始時間 var strFourth=mySheet.getRange(i,6).getValue(); //終了時間 //YYYY年MM月dd日(dddd)HH:mm var strThird = Utilities.formatDate(strThird, "JST", "YYYY'年'MM'月'dd'日' (E) HH:mm aaa"); var strFourth = Utilities.formatDate(strFourth, "JST", "HH:mm"); function test(){ var strThird = new Date(); var logging = formatDate(strThird);//ここにサーバ時間を代入すると整形値が戻ってくるので変数に代入♪ Logger.log(logging); } function formatDate(strThird) { var youbi_all = new Array("日","月","火","水","木","金","土","日"); //配列的な? var mae_today = Utilities.formatDate(server_time,'Asia/Tokyo','YYYY年M月d日'); //Dateのフォーマットの変更前半部分 var ushiro_today = Utilities.formatDate(server_time,'Asia/Tokyo','HH:mm'); //Dateのフォーマットの変更後半部分 var myDay = Utilities.formatDate(server_time,"JST","u"); var E_kanji = "(" + youbi_all[myDay] + ")";//曜日が漢字一ケタで出てくる♪例⇒(日) 「曜日を1-7で」 return mae_today + E_kanji + ushiro_today;//文字列の連結 } var strTo=mySheet.getRange(i,3).getValue(); //toアドレス var strCc="";//CCアドレス var strBody=strDoc.replace(/{学校名}/,strFirst).replace(/{氏名}/,strSecond).replace(/{開始時間}/,strThird).replace(/{終了時間}/,strFourth); //社名、姓名を置換 MailApp.sendEmail( strTo, strSubject, strBody, { cc: strCc, //ccアドレス name: strSender } ); //MailAppではfromが設定できないとのこと } } ### 試したこと 下記のコードを行を取得した後、付け加えて実行をしてみたところ ↓↓↓ //YYYY年MM月dd日(E)HH:mm var strThird = Utilities.formatDate(strThird, "JST", "YYYY'年'MM'月'dd'日'(E)HH:mm"); var strFourth = Utilities.formatDate(strFourth, "JST", "HH:mm"); ↓↓↓ GASの送信メールを 2018年07月05日(Thu)10:00~10:30 と表記を変換することができました。 (Thu)のところが惜しく、ここを “(木)” に変換することが困難な状況です。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。
----------👍を押しています

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

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

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

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

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

----------

2018/07/08 07:44 編集

私も初心者ですが、質問する時のポイントを! コードは<code>ボタンを押してコードの言語(名前)を書いて、その中に入力すると回答が付きやすいですよ。同じ色で長々と書いてあると、プロの人はどうか知りませんが、初心者は読む気がしないですから・・・。
guest

回答1

0

私も、超初心者ですが、ちょっと似たことやってたかもしれないので一応……
メールのGASの部分は全く組んだことがないので無視して回答してます。見当違いのことしてたらごめんなさい………。むしろスプレットシートに出力する部分は僕よりだいぶ上の技量のようです…(笑)
僕は昔、以下のコードにたどり着くまでに1日検索してましたw

とりあえず、質問者様の以下のコードのみをいじります。

javascript

1function formatDate() { 2var d = new Date(); //今日の日付をDateオブジェクトに 3Logger.log(_HHmm(d)); 4} 5/* 時刻の表記をHH:mmに変更 */ 6function _HHmm(str){ 7return Utilities.formatDate(str, 'JST', 'HH:mm'); 8}

次に私がLINE notyfyで遊んだ時に似た処理のコードです

javascript

1var today = new Date();//GASサーバより日付時刻の取得 2var f_today = Utilities.formatDate(today,'Asia/Tokyo','YYYY年M月d日-hh時mm分'); //Dateのフォーマットの変更

このコードを実行すると、「YYYY年M月d日-hh時㎜分」という風に変換されます。
一度以下に目を当してみて、書いてある通りの形式で書いてみてください。
formatdate

日付の形式なんですけど、質問者様が、「2018年7月5日(木)10:00」とおっしゃってたので、「YYYY年M月d日(E)HH:mm」に形式になります。7月ではなく、07月とする場合は、「MM月」とする必要があったりします。ここで最も大切なことは、大文字と小文字は全く別の指定ということですね!

#質問者様の形式に近づけよう①

javascript

1function formatDate() { 2var d = new Date(); //今日の日付をDateオブジェクトに(GASサーバより日付時刻の取得) 3var f_today = Utilities.formatDate(d,'Asia/Tokyo','YYYY年M月d日(E)HH:mm'); //Dateのフォーマットの変更 4Logger.log(f_today); 5}

この場合、Logger.log(f_today)は、「2018年7月8日(Sun)08:49」という風になって、曜日が…ちょっと惜しいので「sun→日」になるようにします。
#質問者様の形式に近づけよう②

javascript

1function test(){ 2var server_time = new Date(); 3 var logging = formatDate(server_time);//ここにサーバ時間を代入すると整形値が戻ってくるので変数に代入♪ 4Logger.log(logging); 5} 6 7function formatDate(server_time) { 8 var youbi_all = new Array("日","月","火","水","木","金","土","日"); //配列的な? 9 var mae_today = Utilities.formatDate(server_time,'Asia/Tokyo','YYYY年M月d日'); //Dateのフォーマットの変更前半部分 10 var ushiro_today = Utilities.formatDate(server_time,'Asia/Tokyo','HH:mm'); //Dateのフォーマットの変更後半部分 11 var myDay = Utilities.formatDate(server_time,"JST","u"); 12 var E_kanji = "(" + youbi_all[myDay] + ")";//曜日が漢字一ケタで出てくる♪例⇒(日) 「曜日を1-7で」 13 return mae_today + E_kanji + ushiro_today;//文字列の連結 14}

関数test、が本番のメイン用として、server_timeに、成形されていないそのままの今の日付(例:Sun Jul 08 09:35:25 GMT+09:00 2018)
を突っ込みます。
formatDateのほうを実行すると、server_timeに値が与えられてないのでエラーが起こります。

server_time(整形されてない時間)を私が作った関数、formatDate(server_time);に突っ込むと、整形された今の日付(例:2018年7月8日(日)09:37)が返ってきます。

#まとめ
とりあえず関数に値(server_time)を与えて処理するのを初めてやったので、だいぶ長いプログラムになってるんじゃないかなと思います。適当に改良お願いします。Loggerlogは確認用です。めっちゃいい勉強になりました。間違ってたらごめんなさい。

投稿2018/07/08 00:45

編集2018/07/09 21:49
----------

総合スコア20

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

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

pee.cyon.cyon

2018/07/09 05:16 編集

ご回答をありがとうございました!!シートすべての行を取得したあとに、ご回答者様のアドバイスのもと、Utilities.formatDateを使用したところ、GASの送信メールを”2018年07月05日(Thu)10:00~10:30”となんとか表記することができたのですが、日本語の<曜日>の取得がいまだ難しい状態です。引き続きチャレンジしてみます。(上の該当のコースコードを書き換えさせていただきました!!)
----------

2018/07/09 12:43 編集

よろしければVAを回答者様の中から選んでいただくと、お互い「win-win」です。 >上のソースコードを書き換えさせていただきました。 ご自由にどーぞ(笑)大歓迎です! ちなみに、こっちでもう一度、関数「test」を実行しましたところ、Logger.logに「2018年7月9日(月)21:24」というように曜日が漢字で問題なく表示できました。 推測ですが、もしかすると「質問者様の形式に近づけよう①」のコードをコピペしてませんか? 「質問者様の形式に近づけよう②」のコードが質問者様にとって正解かと思われます。 二つのコードの実行結果の例(Logger.log)は、…… ①のコード⇒2018年7月9日(Mon)21:24 ②のコード2018年7月9日(月)21:24 のようになるように作ったはずですが…。 私も超初心者なので、あてにせずに、話半分ぐらいで聞き流してもらっても構いません。
pee.cyon.cyon

2018/07/10 00:47 編集

大変勉強になりました。またご丁寧な回答を、ありがとうございました! 回答②をそのままコピペしてみたのですが、実行したところ 2018年07月05日 (Thu) 10:00 AM~10:30 のまま、送信されてしまいますので server_time を strThird に 変えてトライしてみましたが 2018年07月05日 (Thu) 10:00 AM~10:30の状態ですので、原因を探しており もしお分かりでしたら、ご教示願えないでしょうか。 どうぞよろしくお願いいたします。
----------

2018/07/11 14:21 編集

すいませんが、質問の下のほうにでも追記して、すべてのソースを見せていただけないでしょうか? お手数おかけします。
macaron_xxx

2018/07/11 00:08

----------さんの回答を理解せずにそのままコピペしているためtest関数が貼り付けられており、それが実行されていないので、当然状況は変わらないです。 もう少しご自身でJavaScript(というかプログラミング全体)を勉強されては、と思いますが。
pee.cyon.cyon

2018/07/11 06:30

アドバイスありがとうございました。今すぐには投稿できるような状況にはないのですが、これからいろいろと勉強させていただき、うまくいきましたらご報告させていただければと思います。その際にはまた、よろしくお願いいたします!!
----------

2018/07/11 13:40 編集

プログラムは<code>ボタンを押してその中に書いてくださるとうれしいです。 ちょっと前の自分のととてもよく似ています。(^_^) コピペプログラムの利点でもあり欠点でもあります。 私も前よりはちょっとプログラムできるようになったのですが、IF文や、For文が大っ嫌いで、使わざるを得ないときは、僕がやるとエラーが起こるので「teratail」や「知恵袋」で質問して教えてもらってます……。 追記のプログラムを見てみると、「日月火水………」などと曜日が書かれている個所などが反映されてないようです(素人目ですが…) GASもJavaScriptもそんなに変わらない(プロの人からしたら怒られそうですが)ような文法なので、javascriptの本で「配列」を勉強することをオススメいたします。GASの本もjavascriptよりは少ないですが発売されていますので下のURLを見ていただければ幸いです。GASは仕様が変わるので本が古い場合があります。「配列」ができるようになったら「Web API」というのをみっちりやるとGASプログラミングに有利かと思います。 一応、URLを紹介しておきますが…(私の性格が、結構、お節介なので…)、あくまでも私の意見ですが本で勉強したほうが個人的に頭に入りやすかったです。 ①https://www.amazon.co.jp/GoogleAppsScript%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-%E6%A8%AA%E5%B1%B1-%E9%9A%86%E5%8F%B8/dp/4798036757 ②https://tonari-it.com/category/google-apps-script/ ③http://www.bmoo.net/archives/google-apps-script-refference ④https://qiita.com/syokoyama/items/d071b1df2b66ba70f564 ⑤https://dotinstall.com/lessons/basic_javascript_v2 (ドットインストール Javascript入門) ⑥https://dotinstall.com/lessons/basic_google_apps_script (ドットインストール GAS入門) まだまだありますのでググってください。 分かりやすいという点では⑤や⑥がおすすめかと思いますが、自分に合った学習方法を使ってください。(僕も自分に合った学習方法が見つからずに何回も挫折しまくってます) GASでいきなりメール送信は自分の理解上、結構難しいので④のURLなどからGASだけやGASとスプレットシートだけでできるプログラムからチャレンジすることをお勧めします。 長文失礼しました。頑張ってください。(僕もまだまだですが…)
macaron_xxx

2018/07/11 15:13

GASはJavaScriptをベースに開発された言語(JavaScriptに便利なメソッドが追加されているイメージ)なので、全く同じと思ってOKです。 (ただし、ほとんどのバージョンは1.6がベースになっています。) https://developers.google.com/apps-script/overview
----------

2018/07/11 21:29

サーバ上で実行できるちょっと古めのバージョンのJavaScriptという認識ですか…。 よくわかりました。ありがとうございます。(*'▽')
pee.cyon.cyon

2018/07/12 00:40

多くの情報を教えてくださり感謝です!「配列」についてjavascriptの本で学んだうえで、GASに取り組んでまいります。うまくいきましたら、またご報告させていただきます。本当に本当にありがとうございました!まずはお礼まで。
----------

2018/07/12 12:53

頑張ってください!私もまだ全然ですが… (1年ぐらい前の私みたいで、つい応援したくなりますね……。)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問