🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google フォーム

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

Google Apps Script

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

Q&A

解決済

2回答

2892閲覧

googleフォームに回答があったら自動返信のメールが送られるスクリプトでエラーが発生してしまいます。

hakuei

総合スコア18

Google フォーム

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

Google Apps Script

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

0グッド

1クリップ

投稿2019/06/10 06:24

gasがうまく機能しなく、エラーが出てしまっております。どこを直せばいいか教えていただけますでしょうか。

■エラー内容

TypeError: undefined からプロパティ「姓」を読み取れません。 at onforsubmit(コード:4)

■スクリプト

function onforsubmit(e) {

// 情報の取得
var lastname = e.namedvalues["姓"];
var firstname = e.namedvalues["名"];
var mailto = e.namedvalues["メールアドレス"];

// googleドキュメント取得による本文の取得
var docTest=DocumentApp.openById("-----");
var strDoc=docTest.getBody().getText(); //ドキュメントの内容を取得

// 文章の置換
var strbody = strDoc.replace(/{姓}/,lastname).replace(/{名}/,firstname);

// メール送信
GmailApp.sendEmail(
mailto, //toアドレス
strsubject, //表題
strbody, //本文
{
from: "-----", //fromアドレス
name: "-----" //差出人
})
}


やりたきこととしては、

googleフォームに回答があると、自動でメール返信をしたいのですが、メール返信の上記スクリプトでエラーが発生しております。
グーグルフォームには正しく回答データが届いているのですが、なぜかエラーになってしまいます。フォームを別で作り、googleフォームに回答されるように飛ばしているからでしょうか。

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

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

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

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

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

papinianus

2019/06/10 07:57

このスクリプトはどこに書いているのでしょうか。それによってどの回答を参考にすべきかがかわります
hakuei

2019/06/10 13:33

formと連携しているスプレッドシートのgasに記載しております。トリガーはformの回答にしています。
papinianus

2019/06/10 22:00

では、kanimaruさんの回答が適切ですね
guest

回答2

0

ベストアンサー

本回答的外れな回答をしておりますので、macaron_xxx様の回答をご覧ください。

TypeError: undefined からプロパティ「姓」を読み取れません。 at onforsubmit(コード:4)

上記の質問の回答ですが、Value取得するときのnamealuesはVが大文字です。
正: namedValues
誤: namedvalues

投稿2019/06/10 06:49

編集2019/06/10 07:05
kanimaru

総合スコア1013

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

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

papinianus

2019/06/10 22:03

質疑で確認したところ的外れでないようです。 また、フォーム送信時トリガーをスプレッドシートに掛けると、一回の回答で複数回トリガーが発動する事例が春先くらいから報告されています。 必須項目が空白でないかを確認するか、そもそもフォームにスクリプトを書くかのいずれかの対応が必要です。後者の場合はmacaron_xxx様の回答を参考になさるとよいかと。
hakuei

2019/06/11 11:45

papinianus様 質疑による正しい回答への導きありがとうございました!スプレッドシートへの記載ですが、無事スクリプトが機能しました!
guest

0

何を参考にしたか知りませんが、全くコードが違います。
うまく機能しないのではなく、プログラムが間違っているだけです。

細かいあれは知りませんが、こんな感じです。

javascript

1function onFormSubmit(e) { 2 var itemResponses = e.response.getItemResponses(); 3 4 for (var i = 0; i < itemResponses.length; i++) { 5 var itemResponse = itemResponses[i]; 6 7 var question = itemResponse.getItem().getTitle(); 8 var answer = itemResponse.getResponse(); 9 10  switch(question) { 11 case '姓': 12 var lastname = answer; 13 break; 14 case '名': 15 var firstname = answer; 16 break; 17 case 'メールアドレス': 18 var mailto = answer; 19 break; 20 } 21/* 以下省略 */ 22} 23

投稿2019/06/10 06:51

macaron_xxx

総合スコア3191

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

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

macaron_xxx

2019/06/10 06:55

スプレッドシートのForm submitは色々バグがあるみたいですよ。 (過去の質問を参照してみてください)
kanimaru

2019/06/10 07:03

macaron_xxxさん ありがとうございます。macaron_xxxさんの回答をみて自身の回答が質問を思いっきり勘違いしました。 何を思ったかFormからスプレッドシートに送信しログをとりスプレッドシートから送信する話とかってに解釈しました。 大変的外れのな回答をしましたが、コメントにその旨を書き自身の戒めとさせていただこうと思います。
macaron_xxx

2019/06/10 07:11

kanimaruさん たぶん、質問者はスプレッドシートから送信するのを想定しているのだと思いますが、 本来、フォームの送信のトリガーはフォームからすべし、ということで回答しています。 なので、勘違いは私の方ですよ。
kanimaru

2019/06/10 07:18

macaron_xxxさん そういう見方もありましたか。回答する側の責任としてもっと視野を広く持ちたいと思います。 実際に質問者さんがどういう意図かは分かりかねますのでどちらがということは、これ以上深追いいたしません。 この度は、ご機会賜りありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問