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

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

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

Q&A

解決済

1回答

1475閲覧

Googleフォームの回答をGmailへ転送する際にファイルアップロード項目を未回答とした時のコードの書き方が分からず困っております…。

dshiraiwa

総合スコア9

0グッド

0クリップ

投稿2022/04/01 08:52

いつもお世話になっております。
色々、調べてみたのですが答えが見つからなかったため、お手数をおかけいたしますがご相談させてください。

Googleフォームの入力内容をGmailに転送するスクリプトを以下のサイトを参考に作成しました。
【GAS】Googleフォームに複数の添付ファイル特定の送信先に送る

ただ1点、私はフォームで添付ファイルのアップロードの質問項目を「必須でない」としたため、アップロードをせずに送信してしまうと以下のエラーメッセージが出てしまいました。

**Exception: 無効な引数: attachments at sendForm
**

そこで、ファイルをアップロードした場合と、しなかった場合とで分岐条件(if文)の設定をすべきかなというところまでは考えが及んだのですが、**「attachments」という因数をどう処理すべきなのか?**が分かりませんでした。

つきましては、簡単で結構ですのでフォームの回答が「未回答」だった場合の対処方法(ファイルアップロードを添付せずにメールを送る)についてご教授いただけないでしょうか?

何とぞよろしくお願いいたします。

function sendForm(e) { // const to = "futoshita.hiroshi@gmail.com" const to = e.response.getRespondentEmail() //「このフォームでは回答者のメールアドレスを収集しています。」のメアド // 件名 const subject = "報告メールです" // 本文 let body = "本日もお疲れさまでした。今日も無事、営業を終了いたしました。" let itemResponses = e.response.getItemResponses() let attachImg = "" for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; var question = itemResponse.getItem().getTitle(); var answer = itemResponse.getResponse(); if (question == "添付画像") { attachImg = DriveApp.getFileById(answer).getBlob(); } // 回答項目 body += "\n\n【" + question + "】\n\n"; // 回答内容 body += "共有画像"; } let options = { "attachments": [attachImg] } MailApp.sendEmail(to, subject, body, options) }

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初
let attachImg = "";
となっていて、画像アップロードがない場合、attachImgは "" のままなのでエラーになっています。
attachImgが""の場合は、attachmentsはnullとするようにすれば良いと思います。

js

1 let options = { 2 "attachments": attachImg ? [attachImg] : null 3 }

あと、もともとのコードだとメール本文ですべての質問の回答が「共有画像」になってしまうと思います。
なので下記のように直してはどうでしょうか。
(行頭が「-」となっている行は削除、「+」となっている行は追加)

diff

12 for (var i = 0; i < itemResponses.length; i++) { 3 var itemResponse = itemResponses[i]; 4 var question = itemResponse.getItem().getTitle(); 5 var answer = itemResponse.getResponse(); 6 if (question == "添付画像") { 7 attachImg = DriveApp.getFileById(answer).getBlob(); 8+ answer = "共有画像"; 9 } 10 // 回答項目 11 body += "\n\n【" + question + "】\n\n"; 12 // 回答内容 13- body += "共有画像"; // 削除 14+ body += answer; // 追加 15 }

投稿2022/04/01 10:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

dshiraiwa

2022/04/01 12:09

ご指導、ありがとうございますっ!!! "attachments": attachImg ? [attachImg] : null についての知識(および情報)がなかったため、本当に助かりましたっ!! これまで3時間ほど、試行錯誤をしていたのですが、一発で解決しましたっ!! 言葉ではお伝えしきれないため、心苦しい限りなのですが… 本当にありがとうございました!!m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問