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

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

新規登録して質問してみよう
ただいま回答率
86.12%
Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

解決済

スクリプトエディタ 日付の表示方法

shiyuh
shiyuh

総合スコア21

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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

1回答

0グッド

0クリップ

541閲覧

投稿2022/05/04 06:53

編集2022/05/07 02:43

以下のコードを使って、Googleフォームの解答をLINEに流すシステムを作っているのですが、
日付の解答が

Wed May 18 2022 00:00:00
GMT 0900(日本標準時)

となってしまいます。
これを

2022年5月18日 水曜日

と表示させるにはどうしたら良いでしょうか??

function GoogleFormToLine(){ var sheet = SpreadsheetApp.getActiveSheet(); var row = sheet.getLastRow(); var column = sheet.getLastColumn(); var range = sheet.getDataRange(); var message = "";  for(var i=1;i<=column;i++){  var item = range.getCell(1, i).getValue();  var value = range.getCell(row, i).getValue();   if(item == "タイムスタンプ"){   value = Utilities.formatDate(value,"JST","yy/MM/dd(E) HH:mm:ss");  }  message += "\n■"+item+"\n"+value;  } SendToLine(message); } function SendToLine(message){ Utilities.formatDate(new Date(), "JST", "YYYY'年'MM'月'dd'日'"); var token = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN'); var op = { "method" : "post", "Content-Type" : "application/x-www-form-urlencoded", "payload": "message=" + message, "headers":{"Authorization" : "Bearer " + token} }; var res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify",op); Logger.log(JSON.parse(res.getContentText())); }

イメージ説明

qnoir様へ

function GoogleFormToLine() { var sheet = SpreadsheetApp.openByUrl("スプレッドシートの共有よりリンクのコピーして貼り付けてます").getSheetByName("フォームの回答 5"); var row = sheet.getLastRow(); var column = sheet.getLastColumn(); var range = sheet.getDataRange(); var message = ""; for (var i = 1; i <= column; i++) { var item = range.getCell(1, i).getValue(); var value = range.getCell(row, i).getValue(); if (item == "レッスン日") { //「質問3」は例。実際の質問のタイトルに変えること。 value = getDateString(value); } if (item == "タイムスタンプ") { value = Utilities.formatDate(value, "JST", "yy/MM/dd(E) HH:mm:ss"); } message += "\n■" + item + "\n" + value; } SendToLine(message); } function getDateString(date) { if (Object.prototype.toString.call(date) !== '[object Date]') { console.log(`日付ではないオブジェクト[${date}]が渡されました。`); return ''; } var w = date.getDay(); var weekname = ['日', '月', '火', '水', '木', '金', '土']; return Utilities.formatDate(date, "JST", `yyyy年M月d日 ${weekname[w]}曜日`); }

イメージ説明

以下のような質問にはグッドを送りましょう

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

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

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答1

1

ベストアンサー

たとえば、日付を変更したい質問のタイトルが「レッスン日」であるとした場合、
下記のようにします。

js

1function GoogleFormToLine() { 2 var sheet = SpreadsheetApp.openByUrl("スプレッドシートのURL").getSheetByName("フォームの回答 5"); 3 var row = sheet.getLastRow(); 4 var column = sheet.getLastColumn(); 5 var range = sheet.getDataRange(); 6 var message = ""; 7 8 for (var i = 1; i <= column; i++) { 9 var item = range.getCell(1, i).getValue(); 10 var value = range.getCell(row, i).getValue(); 11 if (item == "レッスン日") { // 実際の質問のタイトルに変えること。タイトルの先頭や末尾に空白が含まれている場合も、省略せずそのままコピーすること。 12 value = getDateString(value); 13 } 14 if (item == "タイムスタンプ") { 15 value = Utilities.formatDate(value, "JST", "yy/MM/dd(E) HH:mm:ss"); 16 } 17 message += "\n■" + item + "\n" + value; 18 } 19 SendToLine(message); 20} 21 22function getDateString(date) { 23 if (Object.prototype.toString.call(date) !== '[object Date]') { 24 console.log(`日付ではないオブジェクト[${date}]が渡されました。`); 25 return '#'; 26 } 27 var w = date.getDay(); 28 var weekname = ['日', '月', '火', '水', '木', '金', '土']; 29 return Utilities.formatDate(date, "JST", `yyyy年M月d日 ${weekname[w]}曜日`); 30} 31 32 33function SendToLine(message){ 34 Utilities.formatDate(new Date(), "JST", "YYYY'年'MM'月'dd'日'"); 35 var token = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN'); 36 var op = 37 { 38 "method" : "post", 39 "Content-Type" : "application/x-www-form-urlencoded", 40 "payload": "message=" + message, 41 "headers":{"Authorization" : "Bearer " + token} 42 }; 43 var res = UrlFetchApp.fetch("https://notify-api.line.me/api/notify",op); 44 Logger.log(JSON.parse(res.getContentText())); 45}

投稿2022/05/04 09:09

編集2022/05/07 03:33
qnoir

総合スコア7746

shiyuh👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

shiyuh

2022/05/06 05:44

ご回答いただきありがとうございます!! 早速試したところ、日付の表示形式は変わったのですが、曜日の表示が出ません。 こちらはどのように対処したらよいでしょうか。。。
qnoir

2022/05/06 06:08

すみませんが、下記確認お願いします。 ・念の為に聞くのですが、フォームを送信しても曜日が表示されない、という理解でよろしいですよね? (エディタから実行しても表示されないのは仕様です) ・エディタのログ(エディタの左に並んでいるアイコンのうち、上から3番目あたりの、実行可能数のアイコン)に何かエラーが表示されていませんか?もし何かエラーのようなものが表示されているのであれば、そのログ表示内容を教えて下さい。 ・フォームの質問がうまく設定できていない(フォームの質問の文や種類が、コードに正しく反映されていない)可能性があります。 フォームのうち、曜日を表示させたい質問の部分がわかる画像キャプチャを載せていただけないでしょうか?
shiyuh

2022/05/06 12:48

フォームを送信しても表示されないと言う認識で間違いございません。 実行可能数アイコンでのエラー表示文化以下の通りです。 フォームの画像は質問大元に再添付いたしました。 2022/05/06 21:42:18 エラー TypeError: Cannot read property 'getLastRow' of null at GoogleFormToLine(無題:3:19)
qnoir

2022/05/06 13:21

「Cannot read property 'getLastRow' of null」ということは、その大本のsheet が nullになっているということだと思います。 何らかの要因で、フォームの回答を蓄積しているスプレッドシートが取得できていない可能性が考えられます。 対策として ・var sheet = SpreadsheetApp.getActiveSheet(); を var sheet = SpreadsheetApp.openByUrl("シートのURL").getSheetByName("シートのタブ名"); (シートのURLとシートのタブ名は実際の名前に変えてください) というように直接シートを指定してみるとよいかもしれません。
shiyuh

2022/05/07 02:46

ご教示いただいた通りやってみたのですが、エラーから抜け出せず、自動返信LINEの内容も曜日が記載されないままです。 現状のコードと、実行ログのエラー内容大元の質問に追記いたしました。 解決方法あればご教示いただけますでしょうか、、、!
qnoir

2022/05/07 03:32

コードを修正しました(元の質問にあったsendToLineを追加)
shiyuh

2022/05/07 03:56

ありがとうございます!!大成功です!! 思い通りのものができました!!大変感謝しております!!!! 最後に一つご質問なのですが、GASには制限があると伺っておりまして、 トリガー数の制限が20とのことなのですが、 今完成したこのシステムの稼働は1日に20回までしかできないと言う認識でしょうか??
qnoir

2022/05/07 04:23 編集

このシステム自体は1日に20回を超えて実行できると思います。 「トリガー数の制限が20個」というのは、1つのトリガーの1日当たりの起動回数上限が20回という意味ではなく、 1ユーザーあたりで同時に有効化できるトリガーの数が20個という意味です。 トリガーの設置個数が全ファイルで20個を超えると、古いトリガーから無効になります。 したがって、今回設置したトリガーよりも後に、別のファイルに新しくトリガーを20個以上設置しない限り、今回のトリガーは生き続けると思います。
shiyuh

2022/05/07 08:37

なるほど!安心しました! 何から何までお力添え頂きありがとうございます。!! 今回本当に助かりました!! またご縁があれば、質問にご回答いただければ嬉しいです!!
qnoir

2022/05/07 08:57

コメントありがとうございます。解決してよかったです。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Google フォーム

Google フォームは、 Google社が提供しているアンケートフォーム作成および集計ができる無料のツール。Googleアカウントがあれば利用が可能です。集計データは、スプレッドシートに収集され、データ分析もできます。

Google Apps Script

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