🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

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

Google Apps Script

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

Q&A

解決済

1回答

4556閲覧

[GAS]スプレットシートのForm送信時トリガが複数回(2回)実行される

shiku

総合スコア16

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google フォーム

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

Google Apps Script

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

0グッド

0クリップ

投稿2019/11/11 05:35

スプレットシートのForm送信時に2回処理が実行されてしまいます。
Googleアカウント種別:G Suite Basic

Googleフォームからの回答を受け取りスプレットシートで処理をしたいと考え、
スプレットシートのスクリプトエディタを以下のように設定しました。

GAS

1function onFormSub(e){ 2 Logger.log(event.values); 3}

また、このスプレットシートにトリガーとして

実行する関数を選択:onFormSub デプロイ時に実行:Head イベントのソースを選択:スプレッドシートから イベントの種類を選択:フォーム送信時

と設定しました。

この状態からスプレットシートに紐づいたフォームを送信したところ、
Logger では選択したはずの項目も空白になっており、
Developer Hubで実行数を確認してみると、
ほぼ同時刻(0.5秒差ほど)で2回onFormsubが実行されてしまっています。

自分で解決方法を調べ、下記の方法を試してみたのですが、治りませんでした。
・フォームを削除し、作成しなおす
・トリガを削除し、設定しなおす
・スプレットシートからすべて作り直す

また、半年前に作成した同様のトリガもなぜか2回実行されております。

formの方にスクリプトを作成し、送信時のトリガをすることも考えたのですが
どうしてもItem取得等に時間がかかるため、できればスプレットシート側で実行したいのです

ご助言よろしくお願いいたします。

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

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

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

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

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

papinianus

2019/11/12 00:40

確かにフォームからの取得は遅くなりがちですが、一件のアンケートがどれだけ膨大なのかわかりませんがそんなに時間がかかるとは思えません。具体的にどれくらいかかるのですか? また、どうしても時間がかかると考えられる状況であれば、トリガーを一日一回とかにして、蓄積された回答群に処理をすればよいのではないかと思います。
shiku

2019/11/12 02:09

ご返信ありがとうございます。 一件のフォームに大体100程の設問が有り、大体5秒ほどかかっております。 また、即時に実行しなければならず、各回答毎に処理も分岐するため、1日一回等の設定もできず、できる限り早い方が良いと考えておりました。 複数実行する場合、必ず回答内容が空の物と入力されている物に分かれているため、そこで判断して処理をすることにしました。 もしこれで問題が有った場合、formの方で実装を考えます。 ご返信ありがとうございました。
guest

回答1

0

ベストアンサー

Loggerに関して

GASでログ出力する2つの方法(Logger.logとconsole.log)の紹介と使い分け

トリガーでやる場合、Loggerは使えないようです。
console.logを使ってみてください。

二回起動に関して

Google Apps Script で二重起動を防止する

原因は解りませんが、結構こういう問題はあるっぽいです。
(自分でもテストしてみたら多重起動してました。)

LockServiceを利用してみるのも一つの手かもしれません。

投稿2019/11/11 07:55

takaD

総合スコア315

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

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

papinianus

2019/11/12 00:38

Formに書けば複数回起動はしないっぽいです。過去の質問から。
shiku

2019/11/12 02:11

ご回答ありがとうございます。 トリガーのConsoleはデバックがしやすくなり、大変参考になりました。 LockSerciveと、formの回答内容を複合し、一応思った通りの動きを実装出来ました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問