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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

Q&A

解決済

5回答

7073閲覧

Googleフォーム回答後スプレッドシートへ転記し、指定メールアドレスへ回答通知メールを送信したい際のトリガー設定

marketing

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

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

0グッド

0クリップ

投稿2020/04/24 10:52

編集2020/04/25 04:40

前提・実現したいこと

当方マーケターであり、プログラミング初心者です。
自社内にエンジニアがおらず、調べても分からなかった為、投稿いたしました。

タイトルの通り、Googleフォームから回答があった際、スプレッドシート へ自動転記し、指定のメールアドレスへ回答の通知を行いたいと考えています。

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

◆GAS上でのエラーコード TypeError: Cannot read property 'namedValues' of undefined(行 3、ファイル「コード」)

該当のソースコード

GoogleAppScript

1function sendFormMail(e){ 2 var address="{送信先メールアドレス}"; 3 var timeStamp=e.namedValues["タイムスタンプ"]; 4 var name=e.namedValues["氏名"]; 5 var sex=e.namedValues["性別"]; 6 var age=e.namedValues["年齢"]; 7 var tel=e.namedValues["電話番号"]; 8 var mailaddress=e.namedValues["メールアドレス"]; 9 var personAddress=e.namedValues["都道府県"]; 10 var body="登録日:"+timeStamp+"\n"; 11 body+="氏名:"+name+"\n"; 12 body+="性別:"+sex+"\n"; 13 body+="年齢:"+age+"\n"; 14 body+="電話番号:"+tel+"\n"; 15 body+="メールアドレス:"+mailaddress+"\n"; 16 body+="都道府県:"+personAddress+"\n"; 17 MailApp.sendEmail(address,"メールタイトル",body); 18}

試したこと

このエラーが出る原因を調べたところ、トリガーからでないと実行できないとの回答がありました。

そこで、「現在のプロジェクトのトリガー>トリガーの追加」をしようとしたのですが、トリガーのイベントのソースを選択に「スプレッドシートから」が表示されません。(添付写真)

イメージ説明

これはGASのコードが原因なのでしょうか?
それとも他に原因があるのでしょうか?
調べても解決できず、行き詰まっております。

ご教示いただけますと幸いです。

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

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

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

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

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

papinianus

2020/04/25 01:55

添付写真をおねがいします
marketing

2020/04/25 04:40

大変失礼いたしました。 只今画像を添付させていただきました! ご指摘いただきありがとうございます。
guest

回答5

0

解決したと思いますが、私も一度「TypeError: Cannot read property 'namedValues' of undefined・・・」にはまりました。
わたくしも初心者で、スプレットシート作成してから、フォームを作成したり
後からEメールをトリガーでできることを知りプログラミングしてみました。
これが問題でした。
さて本題です。

1つ目は、クロームバージョンのアップデートや再起動をしてみてください。
2つ目は、最初から作成ください。
作成手順
①フォームを作成>「回答」>スプレットシートをクリック
②スプレットシートを開く
③ツール>スクリプトエディタ>
④コードを記述してください。
⑤編集>現在のプロジェクトのトリガー
⑥トリガーを記述

フォーム>スクリプトエディタ>現在のプロジェクトのトリガー
のようにそれぞれにあるようですね!

投稿2020/05/09 06:30

AShind

総合スコア4

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

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

marketing

2020/05/14 19:24

ご回答いただきありがとうございました! 色々試行錯誤して行ったところ、原因としては、何故か自動的にChromeに紐付いている別のGoogleアカウントへ移動してしまっているようでした。 (スクリプトの右上に表示されるアドレスは、当該アドレスのものが表示されていたので、不思議です。。。)
guest

0

原因

手順通りに該当のスプレッドシートからスクリプトエディタを開いていましたが、何らかの理由でスクリプトエディタを開く際に、自動的にChromeに紐付いている別のGoogleアカウントへ移行してしまっているようでした。
(但し、スクリプトの右上に表示されるアドレスは、当該アドレスのものだったので根本的な原因は不明です。。。)

解決方法

該当するGoogleアカウント以外は全てログアウトし、一旦全てのアカウントの紐付けをChromeから解除しました。
こうする事で、スクリプトエディタを開くと同時に他のアカウントに移行されてしまう現象が解決しました。

とても初歩的ではありますが、単純な事で解決しましたので、参考程度に。。。
ご回答下さった皆様、ありがとうございました!

投稿2020/05/14 20:30

marketing

総合スコア1

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

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

0

疑問が残る現象ではありますが、取り急ぎ解決したので掲載します。

原因

手順通りに該当のスプレッドシートからスクリプトエディタを開いていましたが、何らかの理由でスクリプトエディタを開く際に、自動的にChromeに紐付いている別のGoogleアカウントへ移行してしまっているようでした。
(但し、スクリプトの右上に表示されるアドレスは、当該アドレスのものだったので根本的な原因は不明です。。。)

解決方法

該当するGoogleアカウント以外は全てログアウトし、一旦全てのアカウントの紐付けをChromeから解除しました。
こうする事で、スクリプトエディタを開くと同時に他のアカウントに移行されてしまう現象が解決しました。

とても初歩的ではありますが、単純な事で解決しましたので、参考程度に。。。
ご回答下さった皆様、ありがとうございました!

投稿2020/05/14 20:28

marketing

総合スコア1

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

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

0

このコードはフォームのスクリプトとして作らなければ動作しません。
なので下記でやりたいと思っておられることが既に誤解がある状態です。

選択に「スプレッドシートから」が表示されません。

フォームの編集画面の右上の…を縦にしたような記号からスクリプトエディタを起動し、スクリプトを貼りつけ、そこからトリガーを作成する画面に移動し、フォームから、を選択する必要があります。

投稿2020/04/26 14:52

papinianus

総合スコア12705

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

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

marketing

2020/04/27 02:39

ご回答いただきありがとうございます。 MeteorShower様と同様の回答をいただいておりますので、転生してコメントさせていただきます。 >フォームの編集画面の右上の…を縦にしたような記号からスクリプトエディタを起動し、スクリプトを貼りつけ、そこからトリガーを作成する画面に移動し、フォームから、を選択する必要があります。 実は今回GASを始める際は、該当するスプレッドシートの「ツール>スクリプトエディタ」から記述を始めているのです。。。 トリガーもGASプロジェクト内の「編集>現在のプロジェクトのトリガー」から設定しようとしていますが、添付画像のようにスプレッドシートが選択できない状況です。 このやり方ではないという事でしょうか? 調べながら行なってはおりますが、かなりの初心者で申し訳ございません。。。
papinianus

2020/04/27 03:03

他の回答を見た上での回答です。情報が増えていません。 > フォームの編集画面の右上の…を縦にしたような記号からスクリプトエディタを起動し、スクリプトを貼りつけ、そこからトリガーを作成する画面に移動し、フォームから、を選択する必要があります。 これ以上の説明はできません。今やっていることは関係ないです。今あるものをいじってどうこうできるものではありません。 フォームは存在するはずです(でなけれればフォームの回答を送信するというのは不可能ですから)。 そのフォームの右上の、送信ボタンのさらに右 … を縦にしたマークからスクリプトエディタを開いてそこにコピペしてください。 私の回答は他の回答と異なり、スプレッドシートの関数では namedValues がイベントオブジェクトとして渡されず依然として解決しないことの指摘ですが、そのような技術的な詳細はどうでもいいと思います。 フォームの右上の … からスクリプトエディタを開いてコピペしてください。
marketing

2020/05/14 19:25

色々試行錯誤して行ったところ、原因としては、何故か自動的にChromeに紐付いている別のGoogleアカウントへ移動してしまっているようでした。 (スクリプトの右上に表示されるアドレスは、当該アドレスのものが表示されていたので、不思議です。。。) ご回答いただきありがとうございました!
guest

0

ベストアンサー

エラーの原因

エラーの原因は,GASのコードが原因なのではなく,GASのコードを動かすきっかけである「トリガー」が原因だと考えられます.

GASでは,function 関数の名前(引数){ ... }の形で関数は定義されるのですが,引数という部分に今回のコードだと「e」が入ってますよね.
関数は,引数がある場合には全ての引数を入力して呼び出してあげる必要があります.(デフォルト引数が指定できる言語は例外ですが)

その引数「e」は本来,トリガであるスプレッドシートから入力されるものなので,トリガのイベントソースを「スプレッドシートから」にできなかったとのことなので,それが原因です.

現状からの対処方法

そのGASコードを書き始めるときに,Google Driveの

[新規]>[その他]>[Google Apps Scripts]

というところからプロジェクトを作りませんでしたか?(ファイルのアイコンが➡みたいなマーク)
これは,Drive上に単体で存在するスクリプト(Standalone Scriptといいます)になっています.

しかし,GASコードを書き始める方法にはもう1種類あって,スプレッドシートに紐づくスクリプト(Container Bound Scriptといいます)もあります.

今回,スプレッドシートに変更があれば,メールを送信するという話でしたので,Formの回答が反映されるスプレッドシートを開き,

[ツール]>[スクリプトエディタ]

というところをクリックして,プロジェクトを作ります.
そこに,先程のコードをコピー&ペーストして保存し,トリガの設定の画面に移動すると,「スプレッドシートから」があるはずです.

  • 補足

「Googleフォームから回答があった際、スプレッドシートへ転記する」という処理はGoogle Formが勝手にしてくれます.(このコードはメール送信をする機能のみ)
ですので,Google Formが自動で作るスプレッドシートに上記のプロジェクトを作るか,スプレッドシートからGoogle Formを作るかしてください.

投稿2020/04/24 11:37

MeteorShower

総合スコア58

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

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

marketing

2020/04/25 04:38

ご回答いただきありがとうございます。 # エラー原因 確かにトリガー設定画面を確認したところ、(引数)が表示されていません。 # 現状からの対処方法 実は今回GASを始める際は、該当するスプレッドシートの「ツール>スクリプトエディタ」から記述を始めているのです。。。 トリガーもGASプロジェクト内の「編集>現在のプロジェクトのトリガー」から設定しようとしていますが、添付画像のようにスプレッドシートが選択できない状況です。 補足ありがとうございます。 Googleスプレッドシート への転記は無事確認できました!
MeteorShower

2020/04/30 01:01

Container Bound Scriptでしたか... 私の環境では問題なく生成できるため,なぜ「スプレッドシートから」がイベントのソースとして表示されないのか分かりかねますが,コードには問題はありません. 原因が権限なのかスプレッドシートなのかわかりませんが,とりあえず新しいスプレッドシートを作成して,ソースコードを貼り付けて同じ手順でやってみてください. それでもスプレッドシートが出ないのであれば,G Suite Developer Hub (Google Apps Script)の方に問題があると思われます.
marketing

2020/05/14 19:25

色々試行錯誤して行ったところ、原因としては、何故か自動的にChromeに紐付いている別のGoogleアカウントへ移動してしまっているようでした。 (スクリプトの右上に表示されるアドレスは、当該アドレスのものが表示されていたので、不思議です。。。) ご回答いただきありがとうございました!
MeteorShower

2020/05/14 23:24

複数アカウント間でそんなこともあるのですね! 直接解決のお手伝いができなかったですが、解決できて何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問