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

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

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

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

Q&A

解決済

2回答

8400閲覧

メソッドのエラーについて

mitsuba

総合スコア20

Google Apps Script

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

0グッド

0クリップ

投稿2018/07/30 02:28

編集2018/08/03 00:41

Googleフォームに投稿された内容について、自動で投稿通知がメールで届く様に設定したいと思っています。

メール配信のスクリプトを以下の様に作成いたしましたが、『メソッド formatDate(string,string,string) が見つかりません。(行47、ファイルコード)』のエラーが表示されてしまいます。

自身の力では解決できなかった為、お力をお貸しいただけますとたすかります。
よろしくお願いします。

function Daily_mail(){ //★★デイリーのトリガとして登録する★★ //管理表の入力状況をデイリーメールとして配信 var ss=SpreadsheetApp.getActiveSpreadsheet(); //開いているスプレッドシートを取得 var Manage_Sheet=ss.getSheetByName("管理表"); //「管理表」シートを取得 var Datas=Manage_Sheet.getDataRange().getValues(); //管理表シートのデータを取得 var d=new Date(); var today=Utilities.formatDate(d,'Asia/Tokyo','yyyy/MM/dd'); //今日の日付をyyyy/MM/ddに変換 var flag=0; //フラグ var Manage_LastRow=Manage_Sheet.getRange("F:F").getValues().filter(String).length; //管理表シートのF列の最終行を取得 var tmp_msg=""; //メール文言 for(var b=2;b<=Manage_LastRow+1;b++){ var tmp=Datas[b][2]; //B列(タイムスタンプ)の日付を取得 //B列でセル結合している部分の回避処理 if (tmp==""){ continue; } var tmp_date=Utilities.formatDate(tmp,'Asia/Tokyo','yyyy/MM/dd');//B列(タイムスタンプ)の日付をyyyy/MM/ddに変換 if(today==tmp_date){ //B列の日付が今日の日付である場合にフラグをたてて、メール本文を作成する flag=1; //フラグに1を代入する tmp_msg=tmp_msg+"● No."+Datas[b][0]+"  "+Datas[b][1]+" "+Datas[b][2]+" "+Datas[b][3]+"\n"; //フォーム投稿があったデータをメール本文用に取りまとめ } } //フラグが立っている場合(当日にフォーム投稿があった場合) if(flag==1){ var ss_Url=ss.getUrl(); //スプレッドシートのURLを取得(スプレッドシートへのリンク生成用) var sh_id=Manage_Sheet.getSheetId(); //シートのシートIDを取得(スプレッドシートへのリンク生成用) var sh_Url=ss_Url+"#gid="+sh_id; //シートのURL var Mail_to="***@***.jp"; //デイリーメールの送付先(To)を入力 var Mail_cc="***@***.jp"; //デイリーメールの送付先(CC)を入力(複数ある場合は、カンマ区切りで複数のアドレスを指定) var Mail_from="***@***.jp";//メール送信元メールアドレス(事務局のML) var Mail_suject="テスト"; //メール件名 //メール本文 var Mail_text="各位\n\n"+ "***応募フォームに投稿がありました。\n"+ "管理表シートを確認ください。\n"+ sh_Url+"\n\n"+ "----------------------------------------------------------\n"+ tmp_msg+ "----------------------------------------------------------\n"; //メール送信(送信元をMITA事務局でメールを送信する) //GmailApp.sendEmail(Mail_to, Mail_suject, Mail_text,{cc:Mail_cc,name:'MITA事務局',from:Mail_from}) } }

≪8/3 画像・文言追加≫
スプレッドシートのB列に本日の日付がある場合に、通知メールが送付される仕様にしたいです。
なお、Googleフォームに投稿された回答を元にデータを別シートへ転記するというGASを組み込んでいる為、
B3には、『2018/08/03』と表示されていますが、セルにカーソルをあてると実際には「2018/08/03 9:30:00」となっています。
イメージ説明

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

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

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

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

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

guest

回答2

0

ベストアンサー

var tmp=Datas[b][2]; //B列(タイムスタンプ)の日付を取得

とありますが、B列は[1]ですね。

投稿2018/07/30 02:41

macaron_xxx

総合スコア3191

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

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

mitsuba

2018/07/30 03:04

回答ありがとうございます。画像を追加いたしましたが、赤枠の日付表記を表示させたいと思っております。 アドバイスいただきました通り、1へ修正したところ、下記のエラーが表示されてしまいました。 ≪エラー≫  TypeError:undefinedからプロパティ「1」を読み取れません。(行42、ファイルコード)   ※42は、上記のコードです。
macaron_xxx

2018/07/30 03:59

どのように修正されましたか? [2]でOKなのに[1]でTypeErrorがでることは考えにくいです。 また、画像が追加されていないようですね。
mitsuba

2018/08/03 00:44 編集

ご回答、ありがとうございます。 ▼修正前  var tmp=Datas[b][2]; //B列(タイムスタンプ)の日付を取得 ▼修正後  var tmp=Datas[b][1]; //B列(タイムスタンプ)の日付を取得 2の場合、以下のエラーが表示されますが、1へ変更いたしますとエラーは表示されなくなります。 ただ、メールは送付されません。 ▼エラー内容  メソッド formatDate(string,string,string) が見つかりません。(行47、ファイルコード) また、画像が追加されておらず、失礼いたしました。再度、追加いたしました。
macaron_xxx

2018/08/03 04:20

修正後は TypeError:undefinedからプロパティ「1」を読み取れません。(行42、ファイルコード) このエラーがでるんですよね?
mitsuba

2018/08/06 00:44

『var tmp=Datas[b][1]; //B列(タイムスタンプ)の日付を取得』の場合、エラーは表示されませんが、メールは送信されない状況です。
macaron_xxx

2018/08/06 01:11

OKです。 何ができて何ができてないのかの問題の切り分けが大事なので、できるようになったこと、できないこと、は明確に提示してください。 今回の場合、エラーは解決したが、メールが送信されない、と問題が変わりました。 →メールが送信されないのはメール送信部がコメントアウトされているから…ではないですよね?
mitsuba

2018/08/06 02:24

記載方法が不明確で、大変失礼いたしました。 最初の投稿の際に、冒頭をコメントアウトしてしまっておりましたが、途中で気づいた為解除しましたが、 変わらずに、メールが送信されない状況です。
macaron_xxx

2018/08/06 03:37

var Manage_LastRow=Manage_Sheet.getRange("F:F").getValues().filter(String).length; //管理表シートのF列の最終行を取得 と for(var b=2;b<=Manage_LastRow+1;b++){ のループの終了条件がちょっとおかしいようですね。 >TypeError:undefinedからプロパティ「1」を読み取れません。(行42、ファイルコード) 上記エラーは最終行が想定と違う値を取得している状況ででているようです。 なので、最終行の取得方法を変更する必要がありますが…。 そこをクリアできれば、メール送信ができることは確認しました。
mitsuba

2018/08/14 06:13

ご回答、ありがとうございます。最終行の値を変更いたしましたら、エラーはなくなりました。また、なぜかは理解できないのですが、全く同じ内容(コード)にて新たに作成したところ、無事にメールも送信されました。色々とアドバイスいただきまして、本当にありがとうございました。
guest

0

formatDateの1つめの引数が、stringだと判定されているのですが、シート上は日付ですよね?
ねんのため、下記の追記をして出力を見ていただけませんか?

javascript

1var tmp=Datas[b][2]; //B列(タイムスタンプ)の日付を取得 2Logger.log(Datas[b][2]); // ←これ 3//Logger.log(Datas[b][1]); //もしくは1にしているならこう。

投稿2018/07/31 01:06

papinianus

総合スコア12705

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

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

mitsuba

2018/08/03 00:46

ご回答、ありがとうございます。 大変申し訳ないのですが、ログ出力というのは、「表示」→「ログ」でよいのでしょうか? お教えいただきましたコードを追加し上記にて表示されるのは、「[18-08-03 09:44:44:692 JST] aaa@○○.jo」です。 回答に誤りがありましたら、ご指摘いただけます様、お願いします。
macaron_xxx

2018/08/03 04:19

同じ要領で Logger.log(Datas[b][1]); も見ていただけますか?
papinianus

2018/08/03 14:39 編集

マイナスかー。なんだろ。必要なステップなんだけどな。 添付された画像をもとにシートを再現したところ同じエラーを得ることができました。 ただ、macaron_xxxさんのおっしゃるように1にしたところ、当初のエラーは回避でき、かつundefinedに関するエラーもでませんでした(メール送信はしていません)。
mitsuba

2018/08/06 00:31

親身になって相談いただきまして、ありがとうございます。 macaron_xxxさんよりコメントいただきました様に、以下の様にスクリプトを変更してログ出力を実施したところ、以下の様に表示されました。 ▼修正後のスクリプト  var tmp=Datas[b][1]; //B列(タイムスタンプ)の日付を取得 Logger.log(Datas[b][1]); ▼ログ内容  [18-08-06 09:27:49:340 JST] Mon Aug 06 09:25:58 GMT+09:00 2018  [18-08-06 09:27:49:341 JST]
papinianus

2018/08/06 13:50

↑のログが出るということは「TypeError」は消えたのですよね? ↑の2行目は、JST]の後は何もないという意味ですか?だったらエラーが起こらないはずなのですが、メソッドのエラーが継続中ということでしょうか?
mitsuba

2018/08/14 06:13

ご回答、ありがとうございます。ご質問いただきました通り、エラーはなくなりました。また、なぜかは理解できないのですが、全く同じ内容(コード)にて新たに作成したところ、無事にメールも送信されました。色々とアドバイスいただきまして、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問