修正したいこと
エラーメールが来ないように修正したい。
現在の状態
下記のサイトなどを参考に、フォームを送信すると自動返信メールが送られる設定をしたところ、
http://creazy.net/2011/03/google_form_mailsend.html
送信者にも、フォーム管理側にも想定したメールは届くのですが、
もう1通、フォーム管理側にエラーメールが届くようになりました。
想定通りの動きをしているのに、エラーメールが来る原因がわかりません。
エラーメッセージ
件名:【失敗】Googleフォームからメール送信中にエラーが発生
本文:Cannot read property 'getLastRow' of null
エラーメッセージを送っていコード部分
catch(e){
MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message);
}
やってみたこと
もしかして、
var sheet = SpreadsheetApp.getActiveSheet();
と
var rows = sheet.getLastRow();
の間にgetSheetName("フォームのタイトル(日本語)")の処理が必要だったのかもしれないと思いいれて見ましたが、
別のエラー
"パラメータ(String)が SpreadsheetApp.Sheet.getSheetName のメソッドのシグネ
チャと一致しません。"
と出ました、、
また、よくわからなかったのが、シート名は回答フォームからスプレッドシートを開いた時のシートのタイトルだと思ったのですが、もしかして違うのでしょうか、この質問をみたのですが、
https://teratail.com/questions/189952
sheetNameが何を指すのかがわからず、、
色々理解しきれていませんが、アドバイスを頂けると助かります。
ソースコード全体
1function sendMailGoogleForm() { 2 Logger.log('sendMailGoogleForm() debug start'); 3 4 //------------------------------------------------------------ 5 // 設定エリアここから 6 //------------------------------------------------------------ 7 8 // 件名、本文、フッター 9 var subject = "[メッセージ]"; 10 var body 11 = "メッセージ\n\n" 12 + "------------------------------------------------------------\n"; 13 var footer 14 = "------------------------------------------------------------\n\n" 15 + ""; 16 17 // 入力カラム名の指定 18 var NAME_COL_NAME = '名前'; 19 var MAIL_COL_NAME = 'メールアドレス'; 20 21 22 // メール送信先 23 var admin = "メールアドレス"; // 管理者(必須) 24 var sendername = "送信者名";//送信者名(必須) 25 var cc = ""; // Cc: 26 var bcc = admin; // Bcc: 27 var reply = admin; // Reply-To: 28 var to = ""; // To: (入力者のアドレスが自動で入ります) 29 30 31 //------------------------------------------------------------ 32 // 設定エリアここまで 33 //------------------------------------------------------------ 34 35 try{ 36 // スプレッドシートの操作 37 var sheet = SpreadsheetApp.getActiveSheet(); 38 39 var rows = sheet.getLastRow(); 40 var cols = sheet.getLastColumn(); 41 var rg = sheet.getDataRange(); 42 Logger.log("rows="+rows+" cols="+cols); 43 44 // メール件名・本文作成と送信先メールアドレス取得 45 for (var i = 1; i <= cols; i++ ) { 46 var col_name = rg.getCell(1, i).getValue(); // カラム名 47 var col_value = rg.getCell(rows, i).getValue(); // 入力値 48 body += "【"+col_name+"】\n"; 49 body += col_value + "\n\n"; 50 if ( col_name === NAME_COL_NAME ) { 51 body = col_value+" 様\n\n"+body; 52 } 53 if ( col_name === MAIL_COL_NAME ) { 54 to = col_value; 55 } 56 } 57 body += footer; 58 59 // 送信先オプション 60 var options = {name: sendername}; 61 if ( cc ) options.cc = cc; 62 if ( bcc ) options.bcc = bcc; 63 if ( reply ) options.replyTo = reply; 64 65 // メール送信 66 if ( to ) { 67 MailApp.sendEmail(to, subject, body, options); 68 }else{ 69 MailApp.sendEmail(admin, "【失敗】Googleフォームにメールアドレスが指定されていません", body); 70 } 71 72 }catch(e){ 73 MailApp.sendEmail(admin, "【失敗】Googleフォームからメール送信中にエラーが発生", e.message); 74 } 75} 76
修正後(現状)
GAS
1//sendMailGoogleForm04 2 3 4function sendMailGoogleForm() { 5 Logger.log('sendMailGoogleForm() debug start'); 6 7 //------------------------------------------------------------ 8 // 設定エリアここから 9 //------------------------------------------------------------ 10 11 // 件名、本文、フッター 12 var subject = "[件名]"; 13 var body 14 = "本文\n\n" 15 + "------------------------------------------------------------\n"; 16 var footer 17 = "------------------------------------------------------------\n\n" 18 + "フッター"; 19 20 // 入力カラム名の指定 21 var NAME_COL_NAME = '名前'; 22 var MAIL_COL_NAME = 'メールアドレス'; 23 var SUBJ_COL_NAME = '件名'; 24 //メール除外カラム 25 var EXCLUDE_COLS = ['ステータス','対応日時']; 26 27 28 // メール送信先 29 var admin = "メールアドレスm"; // 管理者(必須) 30 31 // スプレッドシートID 32// URLが「https://docs.google.com/spreadsheets/d/abc1234567/edit#gid=0」だったら「abc1234567」がID 33var spread_sheet_id = 'ID'; 34 35 36 37 //------------------------------------------------------------ 38 // 設定エリアここまで 39 //------------------------------------------------------------ 40 41 try{ 42 43 // スプレッドシートの操作 44 45 var ss = SpreadsheetApp.openById(spread_sheet_id); 46 var sh = ss.getSheetByName('form_ans');//シート名 47 console.log("ファイル名",sh.getName()); 48 49 var rows = sh.getLastRow(); 50 console.log("rows:",rows); 51 52 var cols = sh.getLastColumn(); 53 console.log("cols:",cols); 54 55 var rg = sh.getDataRange(); 56 Logger.log("rows="+rows+"cols="+cols); 57 58 //メール件名・本文作成と送信先メールアドレス取得 59 var to = ""; //To:(入力者のアドレスが自動で入ります) 60 for(var j = 1;j<=cols;j++){ 61 var col_name = rg.getCell(1,j).getValue(); //カラム名 62 var col_value = rg.getCell(rows,j).getValue(); //入力値 63 //メール用変換 64 if(col_name === NAME_COL_NAME){ 65 body = col_value + "様\n\n"+body; 66 } 67 if(col_name === MAIL_COL_NAME){ 68 to = col_value; 69 } 70 if(col_name === SUBJ_COL_NAME){ 71 subject += col_value; 72 } 73 //日付フォーマットの変換 74 //他にも変換したいカラムがある場合はこのif文をコピーしてカラム名・日付フォーマットを変更する 75 if(col_name === 'タイムスタンプ'){ 76 col_value = Utilities.formatDate(col_value,"JST","yyyy-MM-dd HH:mm:ss"); 77 } 78 //メール送信除外カラム 79 if(EXCLUDE_COLS.length > 0){ 80 is_exclude = false; 81 for(var k = 0;k<EXCLUDE_COLS.length;k++){ 82 if(col_name === EXCLUDE_COLS[k]){ 83 is_exclude = true; 84 break; 85 } 86 } 87 if(is_exclude){ 88 //除外カラムなのでスキップ 89 continue; 90 } 91 } 92 //メール本文に追加 93 body += "["+col_name+"]\n"; 94 body += col_value + "\n\n"; 95 } 96 97 body += footer; 98 /*ユーザー宛送信*/ 99 //送信オプション 100 var options = {}; 101 if(admin)options.replyTo = admin; 102 //メール送信 103 if(to){ 104 MailApp.sendEmail(to,subject,body,options); 105 }else{ 106 MailApp.sendEmail(admin,"[失敗]Googleフォームにメールアドレスが指定されていません",body); 107 } 108 109 /*管理者宛送信*/ 110 //送信先オプション 111 var options = {}; 112 if(to)options.replyTo = to; 113 //連続で送るとエラーになるので1秒スリープ 114 Utilities.sleep(1000); 115 MailApp.sendEmail(admin,subject,body,options); 116 117 118 }catch(e){ 119 MailApp.sendEmail(admin,"[失敗]Googleフォームからメール送信中にエラーが発生",e.message); 120 } 121} 122
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/27 12:23 編集
2020/06/27 12:38
2020/06/27 12:48
2020/06/27 14:39
2020/06/27 14:40
2020/06/27 15:10 編集
2020/06/27 16:12
2020/06/27 16:28
2020/06/27 16:33
2020/06/27 16:45
2020/06/27 16:56
2020/06/27 17:00
2020/06/27 17:17 編集
2020/06/27 17:10