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

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

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

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

Q&A

0回答

3096閲覧

GAS:Googleフォームのデータを取得できないことがある

mocochannn

総合スコア0

Google Apps Script

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

1グッド

2クリップ

投稿2022/12/13 11:27

前提

業務効率化のため、Googleフォームに入力された内容をメールで送るGASを実装しています。
1日に1件ほどではあるのですが、以下のエラーが出てメールの送信が漏れてしまい、困っています。

実現したいこと

Googleフォームに入力された内容をメールで転送する。
転送できているのだが、1日に1件くらい以下のエラーが出てしまう。

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

Exception: フォームのデータを取得できませんでした。しばらくしてからもう一度お試しください。
at sendform(コード:2:17)

該当のソースコード

function sendform(e){
var items = e.response.getItemResponses();
var msg = '';
var ttl = '';

var name = items[1].getResponse();
var jobno = items[2].getResponse();
ttl = jobno + ' ' + name + ' 納品報告';

for (var i = 0; i < items.length; i++) {
var item = items[i];
var q = item.getItem().getTitle();
var a = item.getResponse();
msg += q + ':\n' + a + '\n\n';
}

let draft = GmailApp.createDraft('メールアドレス', ttl, msg);
let draftID = draft.getId();
GmailApp.getDraft(draftID).send();
}

試したこと

フォームに入力されたデータに異常がないか
→特に他と変わらなかった

アドバイスをいただけますと幸いです。
どうぞよろしくお願いいたします。

daishi👍を押しています

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

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

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

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

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

dshiraiwa

2023/01/22 03:50

(解決方法でなく、申し訳ないです) 私も同様の現象で非常に困っておりまして… 調べたところ、こちらのサイト(※注1)では回答された方が ↓ 「e.response の前に1秒 sleep を入れて様子見」したものの、結局は「数日はエラーなく動作していましたが、やはり同じエラーが出ました。エラー処理を追加して様子見」 ↑ という結論で終わっているため、結局、解決されておらず、 こちらのサイト(※注2)では ↓ フォーム直送は諦める フォームから取得するのは不安定なためスプレッドシートから取得します。これは実行時間は伸びますが確実な方法だと思います。 ↑ ということで、フォームではなくスプレッドシートからスクリプトを別に作るという迂回策でしたので問題の根本的な解決にはならなそうです…(※私もGAS初心者なので、一から再び作るのは避けたい) ということでmocochannnさん同様、困り果てておりましたので、コメントさせていただきました。 (このコメントで、より注目度が高まれば良いかなと…) また、このエラーですが以下の点が特徴かなと思っています。 ・以前はなかった(おぼろげながら昨年の9月くらいから頻発し始めた) ・上手くいくときもあるので、エラーの再現が難しい ・他(成功ケース)と比べて時間が短い「実行数」の「期間」の時間が「0.3秒~1.5秒」 ↑ これら点までは把握できているのですが、いかんせん、ネット上において適切な対処法を見つけることができませんでした。(英語であれば情報があるかもしれませんが、私には分からず…) つきましては、ぜひ対策法についての知見がある方のご教授をいただきたく、 私からもよろしくお願いいたしますm(_ _)m いつも頼りきりでスイマセン…。 ※注1のURL: https://ja.stackoverflow.com/questions/92741/google%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E9%80%81%E4%BF%A1%E6%99%82%E3%81%AE%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%8E%9F%E5%9B%A0%E4%B8%8D%E6%98%8E%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC-exception-%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%81%A7%E3%81%97%E3%81%9F-%E3%81%97%E3%81%B0%E3%82%89%E3%81%8F%E3%81%97%E3%81%A6%E3%81%8B%E3%82%89%E3%82%82%E3%81%86%E4%B8%80%E5%BA%A6%E3%81%8A%E8%A9%A6%E3%81%97%E3%81%8F%E3%81%A0%E3%81%95 ※注2のURL: https://vegcale.com/home/2022/12/23/failed-to-retrieve-form-data/#script
dshiraiwa

2023/02/05 15:23

とりあえず、エラーが起きた時には再びトライするよう書き換えてみました。 ↓ function sendform(e){ var maxRetries = 3; var items; var msg = ''; var ttl = ''; for (var retry = 0; retry < maxRetries; retry++) { try { items = e.response.getItemResponses(); break; } catch (error) { if (retry === maxRetries - 1) { throw error; } Utilities.sleep(1000); } } var name = items[1].getResponse(); var jobno = items[2].getResponse(); ttl = jobno + ' ' + name + ' 納品報告'; for (var i = 0; i < items.length; i++) { var item = items[i]; var q = item.getItem().getTitle(); var a = item.getResponse(); msg += q + ':\n' + a + '\n\n'; } let draft = GmailApp.createDraft('メールアドレス', ttl, msg); let draftID = draft.getId(); GmailApp.getDraft(draftID).send(); }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問