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

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

ただいまの
回答率

90.49%

  • Google Apps Script

    886questions

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

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 366

```### 前提・実現したいこと
超初心者のため、コードをコピー&ペーストしながら凌いでいます。
スプレッドシートから取得した「日付と時刻」を、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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ----------

    2018/07/08 09:51 編集

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

    キャンセル

回答 1

+1

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

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

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


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

var today = new Date();//GASサーバより日付時刻の取得
var 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月」とする必要があったりします。ここで最も大切なことは、大文字と小文字は全く別の指定ということですね!

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

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


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

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

function test(){
var server_time = new Date();
 var logging = formatDate(server_time);//ここにサーバ時間を代入すると整形値が戻ってくるので変数に代入♪
Logger.log(logging);
}

function formatDate(server_time) {
  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;//文字列の連結
}

関数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 23:59 編集

    https://qiita.com/yasuyuki_tsuda/items/11e882076e2dc9fdee16

    Utilities.formatDate(today,'Asia/Tokyo','YYYY年M月d日-hh時mm分');
    の部分に関してはこのサイトが大元です。
    よろしければご覧になってください。

    キャンセル

  • 2018/07/09 10:03 編集

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

    キャンセル

  • 2018/07/09 21:27 編集

    よろしければVAを回答者様の中から選んでいただくと、お互い「win-win」です。

    >上のソースコードを書き換えさせていただきました。
    ご自由にどーぞ(笑)大歓迎です!

    ちなみに、こっちでもう一度、関数「test」を実行しましたところ、Logger.logに「2018年7月9日(月)21:24」というように曜日が漢字で問題なく表示できました。

    推測ですが、もしかすると「質問者様の形式に近づけよう①」のコードをコピペしてませんか?
    「質問者様の形式に近づけよう②」のコードが質問者様にとって正解かと思われます。

    二つのコードの実行結果の例(Logger.log)は、……
    ①のコード⇒2018年7月9日(Mon)21:24
    ②のコード2018年7月9日(月)21:24
    のようになるように作ったはずですが…。

    私も超初心者なので、あてにせずに、話半分ぐらいで聞き流してもらっても構いません。

    キャンセル

  • 2018/07/09 21:40

    追記ですが・・・・・・。

    Utilities.formatDate(today,'Asia/Tokyo','YYYY年M月d日-hh時mm分');

    「YYYY年M月d日-hh時mm分」の(アルファベットの)部分は

    https://sites.google.com/site/gasgaidobukku/utilities/formatdate

    このページを参考にいたしました。
    よろしければご確認ください。

    キャンセル

  • 2018/07/10 09:44 編集

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

    キャンセル

  • 2018/07/10 20:15 編集

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

    キャンセル

  • 2018/07/11 09:08

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

    キャンセル

  • 2018/07/11 15:30

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

    キャンセル

  • 2018/07/11 21:47 編集

    プログラムは<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とスプレットシートだけでできるプログラムからチャレンジすることをお勧めします。
    長文失礼しました。頑張ってください。(僕もまだまだですが…)

    キャンセル

  • 2018/07/12 00:13

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

    https://developers.google.com/apps-script/overview

    キャンセル

  • 2018/07/12 06:29

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

    キャンセル

  • 2018/07/12 09:40

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

    キャンセル

  • 2018/07/12 21:53

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

    キャンセル

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Google Apps Script

    886questions

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