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

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

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

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

Gmail

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

Google Apps Script

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Google

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

Q&A

解決済

1回答

1514閲覧

google formsで特定の質問にチェックが入っていた場合のみ メールを送信するようにしたい

yshyk_n

総合スコア1

Google フォーム

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

Gmail

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

Google Apps Script

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Google

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

0グッド

0クリップ

投稿2021/08/05 09:10

前提・実現したいこと

GoogleForm送信時、ある1つのチェックボックス形式の質問にチェックが入っていた場合のみ
メールを送信するようにしたいです。

ご存知の方がいらっしゃいましたらご教示いただけますと幸いです。
宜しくお願い致します。

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

エラーは発生しておらず、実行数を確認しても「完了」となっているのですが
メールが受信されず、また送信元アドレスの送信履歴もない状態です。

該当のソースコード

function sendForm(e){ var subject = "問い合わせが送信されました" var body = ""; var itemResponses = e.response.getItemResponses(); var to = 'xxxx@xxxx.xxxx'; for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var title = itemResponse.getItem().getTitle(); var ans = itemResponse.getResponse(); body += '\n\n['+title+']\n\n'; body += ans; if (title==="チェックボックス形式の質問名") { if (ans==="TRUE") { MailApp.sendEmail({to:to,subject:subject, body:body}) } } } }

試したこと

if (title==="チェックボックス形式の質問名") {
if (ans==="TRUE") {
MailApp.sendEmail({to:to,subject:subject, body:body})

上記で行けるかと思ったのですが、上述の通り
メールが受信されず、また送信元アドレスの送信履歴もない状態となってしまいます。
ほかの方法等調べてみたのですが、解りませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

チェックボックス形式の質問の回答は、チェックを入れた回答が、配列で返ってきます。

「TRUE」という項目のチェックボックスが1つだけ設定されているとして、
これにチェックを入れて回答した場合、上記のコードの

略 var ans = itemResponse.getResponse(); 略

の部分でansには「TRUE」という文字を要素に持つ配列([TRUE])が格納されます。

(直後に Logger.log(ans); とすると、ログには [TRUE] と表示されます)

[TRUE]という配列と"TRUE"という文字列を比較するとfalseになります。

したがって、TRUEだけにチェックが入っているかどうかを判定するには

js

1 if (ans==="TRUE") {

ではなく、配列を文字列化してやって

js

1 if (ans.toString() == "TRUE") {

とするとよいのではないでしょうか。


以下は余談というか応用です。

チェックボックスが1つしかない場合は、
・チェックを入れたら itemResponsesに含まれる
・チェックを入れなければ itemResponsesに含まれない
という結果になるので、titleだけ比較すればよく、"TRUE"という文字列の比較は不要になります。

js

1function sendForm(e){ 2 var subject = "問い合わせが送信されました" 3 var body = ""; 4 var itemResponses = e.response.getItemResponses(); 5 var to = 'xxxx@xxxx.xxxx'; 6 for (var i = 0; i < itemResponses.length; i++) { 7 var itemResponse = itemResponses[i]; 8 var title = itemResponse.getItem().getTitle(); 9 var ans = itemResponse.getResponse(); 10 body += '\n\n['+title+']\n\n'; 11 body += ans; 12 if (title==="チェックボックス形式の質問名") { 13 MailApp.sendEmail({to:to,subject:subject, body:body}) 14 } 15 } 16}

ただしこれはチェックボックスが2つ以上の場合には利用できません。
(上記の応用コードだと、チェックボックスが2つ以上の場合、TRUEにチェックが入っていなくとも、その他のチェックボックス1つ以上にチェックが入っていればメールが送信されてしまいます)

投稿2021/08/05 13:57

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yshyk_n

2021/08/10 01:48

ご回答ありがとうございます。 ご指摘いただきました配列の文字化を実施しましたところ、解決いたしました。 応用のご教示までいただき、非常に助かりました。 重ねて御礼申し上げます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問