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

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

ただいまの
回答率

90.03%

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,638

mitsuba

score 17

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」となっています。
イメージ説明

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

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


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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/06 11:24

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

    キャンセル

  • 2018/08/06 12: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、ファイルコード)
    上記エラーは最終行が想定と違う値を取得している状況ででているようです。

    なので、最終行の取得方法を変更する必要がありますが…。

    そこをクリアできれば、メール送信ができることは確認しました。

    キャンセル

  • 2018/08/14 15:13

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

    キャンセル

-1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/06 09: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]

    キャンセル

  • 2018/08/06 22:50

    ↑のログが出るということは「TypeError」は消えたのですよね?

    ↑の2行目は、JST]の後は何もないという意味ですか?だったらエラーが起こらないはずなのですが、メソッドのエラーが継続中ということでしょうか?

    キャンセル

  • 2018/08/14 15:13

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

    キャンセル

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

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