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

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

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

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

Google Apps Script

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

Q&A

2回答

14823閲覧

GAS「getItemResponses」を呼び出せないエラーについて

supe

総合スコア1

Google フォーム

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

Google Apps Script

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

0グッド

2クリップ

投稿2021/04/18 21:03

前提・実現したいこ

Googleフォームにて、自動返信メール付きのフォーム作成を目指しています。
返信メールに、フォームで得た回答のコピーを載せる為、回答を取得したいです。
取得したい質問は選択式(グリッド)です。

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

「getItemResponses」が呼び出せないエラーを解決出来ずにいます。

TypeError: Cannot read property 'getItemResponses' of undefined at onFormsubmit(コード:4:34)

該当のソースコード

GAS

1// FormApp.getActiveForm() 2function onFormsubmit(e) { 3 4 var itemResponses = e.response.getItemResponses(); 5 var answer = itemResponses[0].getResponse(); 6 7 var mail = e.namedValues["メールアドレス"][0]; 8 var subject = "タイトル"; 9 var body = answer; 10 11 MailApp.sendEmail(mail,subject,body); 12}

試したこと

過去の質問等をもとに以下を試してみました。

 ・トリガーを作成しなおす。
・プロジェクトごとを削除して作り直す。
・コードに「//FormApp.getActiveForm()」を追加。
・アカウントから、スクリプトのアクセス権限の確認。

4、5行目コメントアウト、bodyの内容手打ちでメール送信自体は出来ました。
その他、解決方法が見つからず行き詰っています。
助言を頂けると助かります、よろしくお願いします。

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

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

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

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

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

Daregada

2021/04/19 00:14

提示されているスクリプトは、コンテナバインド型のはずですが、 ・フォーム作成画面で右上のメニューから「スクリプトエディタ」を選択して作成した ・フォームの回答を保存するシートの画面で「ツール」メニューから「スクリプトエディタ」を選択して作成した のどちらでしょうか。
supe

2021/04/20 10:11

アドバイスありがとうございます。 作成は後者の「フォームの回答を保存するシートの画面で「ツール」メニューから~になります。
guest

回答2

0

フォームを対象にしたイベントオブジェクトと、シートを対象にしたイベントオブジェクトが、ひとつのスクリプトに混在しているからです。

GASのイベントオブジェクトは、対象となるサービスにより構成が異なります。

Event Objects  |  Apps Script  |  Google Developers

を見ると、namedValuesは「Google Sheet events」にだけ存在し、responseは「Google Forms events」にだけ存在しています。

どちらもフォーム送信時に使うイベントオブジェクトですが、コンテナバインド型スクリプトがフォームとシートのどちらに結びついているかによって、使えるものと使えないものが変わります。

コンテナバインド型スクリプトがフォームと結びついているのであれば、e.responseを使ってフォームに入力した値を得られるいっぽう、e.namedValuesundefinedになります。

反対に、コンテナバインド型スクリプトが(回答をまとめた)シートと結びついているのであれば、e.namedValuesを使ってフォームに入力した値を得られるいっぽう、e.responseundefinedになります。

undefinedにならないやつだけ使ってください。

投稿2021/04/19 00:33

Daregada

総合スコア11990

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

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

0

投稿2021/04/18 23:26

y_waiwai

総合スコア87719

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

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

supe

2021/04/20 10:16

アドバイスありがとうございます。 私の場合はDaregada氏の仰る、使えるオブジェクトの違いを理解していなかった点が問題だったようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問