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

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

ただいまの
回答率

90.12%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 281

hakuei

score 11

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フォームに回答されるように飛ばしているからでしょうか。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • papinianus

    2019/06/10 16:57

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

    キャンセル

  • hakuei

    2019/06/10 22:33

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

    キャンセル

  • papinianus

    2019/06/11 07:00

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

    キャンセル

回答 2

checkベストアンサー

+2

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/11 07:03

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

    キャンセル

  • 2019/06/11 20:45

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

    キャンセル

+1

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

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

function onFormSubmit(e) {
  var itemResponses = e.response.getItemResponses();

  for (var i = 0; i < itemResponses.length; i++) { 
    var itemResponse = itemResponses[i];

    var question = itemResponse.getItem().getTitle(); 
    var answer = itemResponse.getResponse(); 

  switch(question) {
      case '姓':
        var lastname = answer;
        break;
      case '名':
        var firstname = answer;
        break;
      case 'メールアドレス':
        var mailto = answer;
        break;
    }
/* 以下省略 */
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/06/10 15:55

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

    キャンセル

  • 2019/06/10 16:03

    macaron_xxxさん
    ありがとうございます。macaron_xxxさんの回答をみて自身の回答が質問を思いっきり勘違いしました。
    何を思ったかFormからスプレッドシートに送信しログをとりスプレッドシートから送信する話とかってに解釈しました。

    大変的外れのな回答をしましたが、コメントにその旨を書き自身の戒めとさせていただこうと思います。

    キャンセル

  • 2019/06/10 16:11

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

    なので、勘違いは私の方ですよ。

    キャンセル

  • 2019/06/10 16:18

    macaron_xxxさん
    そういう見方もありましたか。回答する側の責任としてもっと視野を広く持ちたいと思います。

    実際に質問者さんがどういう意図かは分かりかねますのでどちらがということは、これ以上深追いいたしません。

    この度は、ご機会賜りありがとうございました!

    キャンセル

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

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる