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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google

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

Q&A

2回答

2444閲覧

Google Apps Script

akiboh

総合スコア6

Google

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

0グッド

1クリップ

投稿2018/05/07 00:22

前提・実現したいこと

Google Apps Scriptでフォームを入力後その内容をメール送信するScriptを作っています。

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

TypeError: undefined からプロパティ「namedValues」を読み取れません。(行 3、ファイル「コード」)

該当のソースコード

function sendFormMail(e){
var address="{xxxxxx@gmail.com}";
var timeStamp=e.namedValues["タイムスタンプ"];
var hokoku=e.namedValues["報告種類"];
var kaisi=e.namedValues["開始時間"];
var owari=e.namedValues["終了時間"];
var yasumi=e.namedValues["休憩時間"];
var biko=e.namedValues["本文備考"];
var subject=hokoku+"連絡"+timeStamp+"私の名前"
var body=hokoku+"報告"+" 私の名前"+"\n";
body+="開始時間"+kaisi+"\n";
body+="終了時間"+owari+"\n";
body+="休憩時間"+yasumi+"\n";
body+="備考"+biko+"\n";
MailApp.sendEmail(address,subject,body);
}

試したこと

再度他のサイトを見て書き換えました。

補足情報(FW/ツールのバージョンなど)

トリガーは「現在のプロジェクトのトリガー」で「実行」に「sendFormMail」を選択、「イベント」に「スプレッドシートから」「フォーム送信時」を選択しました。

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

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

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

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

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

guest

回答2

0

TypeError: undefined からプロパティ「namedValues」を読み取れません。(行 3、ファイル「コード」)

e.namedValuesのプロパティにタイムスタンプはないです。
タイムスタンプはスプレッドシート側で受信時に自動的に記述される仕様のようです。
タイムスタンプの値はe.values[0]で取得できます。

ただ、ここは別にタイムスタンプから日付を取って来なくても良く、フォームに入力した”日”だけを”05/07"か"5/7"の形にしてあげれば良いのですが、

であるならば、Utilities.formatDate(new Date(e.values[0]), 'Asia/Tokyo', 'MM/dd')でよろしいかと思います。

ただし、上記がご質問の意図であるならば、本件のタイトルをもっと具体的に表現すべきです。
例えば、「Googleフォーム送信後のタイムスタンプを「05/07」のように整形したい」など。

投稿2018/05/22 03:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

「TypeError: undefined からプロパティ「namedValues」を読み取れません。」というエラーの発生場所が(行 3、ファイル「コード」)となっていますから、質問に書かれたコードの3行目、"var timeStamp=e.namedValues["タイムスタンプ"];"で問題が発生しています。

上記の行に、"e.namedValues["タイムスタンプ"]"という部分があって、「undefined からプロパティ「namedValues」を読み取れません」というエラーなのですから、eにフォームが渡されていない(何も渡されていないので、未定義(undefined)の状態になっている)という事が原因だと考えられます。

===
気になるのは、質問の最初には

Google Apps Scriptでフォームを入力後その内容をメール送信するScriptを作っています

と書かれているのに補足情報では、

トリガーは「現在のプロジェクトのトリガー」で「実行」に「sendFormMail」を選択、「イベント」に「スプレッドシートから」「フォーム送信時」を選択しました。

と、フォームの情報ではなく、スプレッドシートの情報を用いてメールを送る設定がされている点です。

"フォーム送信時"というスプレッドシートは存在しますか? そこには、メール送信に必要な情報が記入されていますか?
トリガーで「フォームから」「フォーム送信時」を選択すると、うまく動いたりしませんか?

投稿2018/05/07 01:13

coco_bauer

総合スコア6915

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

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

akiboh

2018/05/07 09:00

>トリガーで「フォームから」「フォーム送信時」を選択すると、うまく動いたりしませんか? はい、これも実は質問させていただくべきことでした。 『フォームから』を選ぶようにあるサイトでは紹介されていました。しかし、『フォームから』の選択肢が出来ないのです。 タイムスタンプのところは、実はフォームが入力された時点で自動的に生成されるもののようで、スプレッドシートにもその項目がありそれを指定しています。 ただ、ここは別にタイムスタンプから日付を取って来なくても良く、フォームに入力した”日”だけを”05/07"か"5/7"の形にしてあげれば良いのですが、その出力方法が分からない為とりあえずタイムスタンプ通りに出力しようと記述しました。 お礼が遅くなりました。ありがとうございました。
退会済みユーザー

退会済みユーザー

2018/05/22 03:02

> 『フォームから』を選ぶようにあるサイトでは紹介されていました。しかし、『フォームから』の選択肢が出来ないのです。 これは当該のGoogleフォームに紐付いたスプレッドシートに紐付いたスクリプトだからです。 (面倒くさい表現で申し訳ございません。。。) 参考にされた情報はGoogleフォーム側にスクリプトを記述する前提でしょう。 両者の違いは送信後(フォーム側)か受信後(スプレッドシート側)かという認識で問題ないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問