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

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

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

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

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

解決済

googleフォームからGASを利用したワークフローの作成について

greentea
greentea

総合スコア1

Google フォーム

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

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

1回答

0リアクション

2クリップ

277閲覧

投稿2022/08/04 04:55

前提

googleフォームを使用し、フォーム送信が発生した際に、上長宛にメールを送信し、申請の承認可否を決定させようと、拾い物のGASを変更しながら作成していたところ、以下のエラーメッセージが発生しました。

実現したいこと

①googleフォームの送信⇒上長に承認可否メールを送信
②メール上に承認可否のリンクを設定し、承認または不可を決定。スプレッドシートに記載。
③承認となった申請をgoogleカレンダーに反映

発生している問題・エラーメッセージ

TypeError: Cannot read property 'response' of undefined(行 9、ファイル「コード」)

該当のソースコード

FormApp.getActiveForm()

function FormSubmit (e) { // プレーンテキストのメール本文 var body = "勤怠申請の確認をお願いいたします。\n\n"; // HTMLテキストのメール本文 var htmlBody = "<p>勤怠申請の確認をお願いいたします。</p>"; // GoogleFormから回答内容を取得 var itemResponses = e.response.getItemResponses(); var recipientMail = ""; var approverMail = ""; for (var i = 0 ; i < itemResponses.length; i++) { var formData = itemResponses[i]; var formLabel = formData.getItem().getTitle(); var response = formData.getResponse(); switch (formLabel) { case "承認者のメールアドレス": approverMail = response; break; case "申請者名": name = response; break; case "申請日": date = response; break; case "申請内容": title = response; break; case "申請理由": content = response; break; case "備考": other = response; break; case "出社時間": //attachedDocument = response; starttime = response; break; default: endtime = response; break; } } var spreadSheetId = "XXXXXXX"; // スプレッドシートのID var spreadsheet = SpreadsheetApp.openById(spreadSheetId); var activeSheet = spreadsheet.getActiveSheet(); // ダミーのURL var url = "https://XXXXXX/kintai"; body = body + "【件名】:勤怠申請" + "\n【申請者名】:" + name + "\n【申請内容】:" + date + " " + title + "\n【申請理由】:" + content + "\n【出社時刻】:" + starttime + "\n【退勤時刻】:" + endtime + "\n【備考】:" + other; 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>"; htmlBody = htmlBody + "<a href=" + url + ">承認</a> <a href=" + url + ">否認</a>"; GmailApp.sendEmail(approverMail, title, body, {htmlBody: htmlBody}); } function calender_part() { //シートを取得 var activeSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); // 現在のSpreadSheetを取得 var Sheet = activeSpreadSheet.getSheetByName("フォームの回答 1"); // spreadsheetのシートを指定 //データのある一番下の行を取得 var lastRow = Sheet.getLastRow(); //各データを取ってくる var name = Sheet.getRange("C" + lastRow).getValue(); var date = Sheet.getRange("D" + lastRow).getValue(); var date2 = Sheet.getRange("E" + lastRow).getValue(); //登録するカレンダーIDを呼び出してeventへ格納 var event = CalendarApp.getCalendarById('XXXXXXXXXXXXX'); //createAllDayEventでカレンダーへイベントを登録 event.createAllDayEvent(name + ":" + date2,date); }

試したこと

①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ヶ月の初心者です。プログラミングは参考コードを基にあーでもないこーでもないといじっているレベルの人間です。色々調べてみましたが、いきづまったため、お手伝いいただけると助かります。

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Google フォーム

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

Google カレンダー

Google カレンダーは、Google社が提供する無料のスケジュール管理ツールです。パソコンやスマートフォン、タブレットなどからアクセスし、スケジュールの追加・変更が可能。Googleアカウントがあれば誰でも使用できます。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。