前提
googleフォームを使用し、フォーム送信が発生した際に、上長宛にメールを送信し、申請の承認可否を決定させようと、拾い物のGASを変更しながら作成していたところ、以下のエラーメッセージが発生しました。
実現したいこと
①googleフォームの送信⇒上長に承認可否メールを送信
②メール上に承認可否のリンクを設定し、承認または不可を決定。スプレッドシートに記載。
③承認となった申請をgoogleカレンダーに反映
発生している問題・エラーメッセージ
TypeError: Cannot read property 'response' of undefined(行 9、ファイル「コード」)
該当のソースコード
FormApp.getActiveForm()
1function FormSubmit (e) { 2 // プレーンテキストのメール本文 3 var body = "勤怠申請の確認をお願いいたします。\n\n"; 4 // HTMLテキストのメール本文 5 var htmlBody = "<p>勤怠申請の確認をお願いいたします。</p>"; 6 7 // GoogleFormから回答内容を取得 8 var itemResponses = e.response.getItemResponses(); 9 var recipientMail = ""; 10 var approverMail = ""; 11 12 for (var i = 0 ; i < itemResponses.length; i++) { 13 var formData = itemResponses[i]; 14 var formLabel = formData.getItem().getTitle(); 15 var response = formData.getResponse(); 16 17 switch (formLabel) { 18 case "承認者のメールアドレス": 19 approverMail = response; 20 break; 21 case "申請者名": 22 name = response; 23 break; 24 case "申請日": 25 date = response; 26 break; 27 case "申請内容": 28 title = response; 29 break; 30 case "申請理由": 31 content = response; 32 break; 33 case "備考": 34 other = response; 35 break; 36 case "出社時間": 37 //attachedDocument = response; 38 starttime = response; 39 break; 40 default: 41 endtime = response; 42 break; 43 } 44 } 45 46 var spreadSheetId = "XXXXXXX"; // スプレッドシートのID 47 var spreadsheet = SpreadsheetApp.openById(spreadSheetId); 48 var activeSheet = spreadsheet.getActiveSheet(); 49 50 // ダミーのURL 51 var url = "https://XXXXXX/kintai"; 52 53 body = body + "【件名】:勤怠申請" + "\n【申請者名】:" + name + "\n【申請内容】:" + date + " " + title + "\n【申請理由】:" + content + "\n【出社時刻】:" + starttime + "\n【退勤時刻】:" + endtime + "\n【備考】:" + other; 54 htmlBody = htmlBody + "<span>【件名】:勤怠申請" + title + "</span><br><span>【申請者名】:" + name + "</span><br><span>【申請内容】:" + date + " " + title + "</span><br><span>【申請理由】:" + content + "</span><br><span>【出社時刻】:" + starttime + "</span><br><span>【退勤時刻】:" + endtime + "</span><br><span>【備考】:" + other + "</span><br><br>"; 55 htmlBody = htmlBody + "<a href=" + url + ">承認</a> <a href=" + url + ">否認</a>"; 56 GmailApp.sendEmail(approverMail, title, body, {htmlBody: htmlBody}); 57} 58 59function calender_part() { 60 //シートを取得 61 var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得 62 var Sheet = activeSpreadSheet.getSheetByName("フォームの回答 1"); // spreadsheetのシートを指定 63 64 //データのある一番下の行を取得 65 var lastRow = Sheet.getLastRow(); 66 67 //各データを取ってくる 68 var name = Sheet.getRange("C" + lastRow).getValue(); 69 var date = Sheet.getRange("D" + lastRow).getValue(); 70 var date2 = Sheet.getRange("E" + lastRow).getValue(); 71 72 //登録するカレンダーIDを呼び出してeventへ格納 73 var event = CalendarApp.getCalendarById('XXXXXXXXXXXXX'); 74 75 //createAllDayEventでカレンダーへイベントを登録 76 event.createAllDayEvent(name + ":" + date2,date); 77 78} 79
試したこと
①googleフォームを作成
②リンクするスプレッドシートを作成
③スプレッドシートからスクリプトを記述
④トリガーの設定
⑤スクリプトのデバッグ
⇒エラー発生。エラー内容は以下の通り。
「TypeError: Cannot read property 'response' of undefined(行 9、ファイル「コード」)」
⑥google先生で調査したところ、上記エラー原因が、レスポンスの呼び出しができていないことによるものだと判明。ただ、呼び出しのキーとなる「FormApp.getActiveForm()」については記述していることから、以下を追加。
{
"timeZone": "Asia/Tokyo",
"dependencies": {
},
"webapp": {
"access": "ANYONE",
"executeAs": "USER_DEPLOYING"
},
"exceptionLogging": "STACKDRIVER",
"oauthScopes": ["https://www.googleapis.com/auth/spreadsheets.currentonly", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/forms", "https://www.googleapis.com/auth/gmail.send", "https://www.googleapis.com/auth/gmail.compose", "https://www.googleapis.com/auth/gmail.modify", "https://mail.google.com/", "https://www.googleapis.com/auth/gmail.addons.current.action.compose"],
"runtimeVersion": "V8"
}
⑦上記⑥を記述後、一度トリガーを削除し、再度トリガー設定。
トリガー設定は「FormSubmit」でフォームから呼び出し、フォーム送信時に都度通知が来るように設定。
⑧「FormSubmit」のデバッグをかけて同一エラーとなる。
⑨エラーが出てても、正常に動作するかもしれないと思い、フォームから送信テストを行ったが、「Summary of failures for Google Apps Script」というメールが到着し、同一エラーをはくことを確認。
⑩フォームの再作成を実施し、上記の流れを漏れなく実施してもみたが、結果は同様。
⑪スプレッドシートからスクリプトを設定したのが原因かと思い、フォームからスクリプトを設定してみたが、結果は上に同じ。
スプレッドシートへのフォーム回答は反映されているが、何が原因かが分からない状態。
補足情報(FW/ツールのバージョンなど)
当方、SEもどきでプログラミング開始1ヶ月の初心者です。プログラミングは参考コードを基にあーでもないこーでもないといじっているレベルの人間です。色々調べてみましたが、いきづまったため、お手伝いいただけると助かります。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/08/08 00:19 編集