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

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

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

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

Q&A

解決済

4回答

1770閲覧

トリガーの二重設定(setValueは"編集"にあたるか)

TD0

総合スコア22

Google Apps Script

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

0グッド

0クリップ

投稿2018/11/09 09:41

お世話になっております。
gasによるsetValueの仕様を考えるため、3つのスプレッドシートを使ってデータの転送で実験を行いました。

ユーザーAとBがそれぞれスプレッドシートaとbを持ち、
Aがオーナー、Bが編集権限を持つcというスプレッドシートが存在します。

bにはGoogle Formのデータが蓄積され、b上のgasによってトリガー「フォーム送信時」でcに転記されます。
cはさらにそのデータを、c上のgasによってトリガー「編集時」でaに転記します。
情報フローは b->c->aとなります。cは仲介役です。

問題は、b->cは自動で転記されますが、c->aは自動で転記されない状態です。
これはgasが記入したデータは「編集された」と認知されない仕様になっているということでしょうか?

手動では転記されるため、転送自体は時間トリガーを設定すれば解決することがわかっています。

ぜひご意見お寄せください。

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

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

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

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

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

guest

回答4

0

ベストアンサー

残念ながらスクリプトでスプレッドシートを編集した場合、onEditのイベントトリガーを発火させることはできません。このドキュメントのRestrictionsの上から3つ目の項目に記載があります。

Script executions and API requests do not cause triggers to run. For example, calling Range.setValue() to edit a cell does not cause the spreadsheet's onEdit trigger to run.

このため、回避策として次のような流れは如何でしょうか。

  1. b->c へのトリガーの際に同時に c->a も動作させる。
  2. 質問に書かれているように時間トリガーを使って変更を確認しつつ c->a を動作させる。

投稿2018/11/11 22:24

kisojin

総合スコア899

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

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

TD0

2018/11/12 00:19

ドキュメントの記載見逃し、失礼しました。返答ならびに回避策のご提示、ありがとうございました。
kisojin

2018/11/12 23:36

ご返事ありがとうございます。
guest

0

上記 Tokyo ダンプです。残念ながら、必須にする対処療法もダメでした。しばらく使うと、メールが2、3本送信されてしまいます。打つ手なし。なにか隠れたウイルスなのでしょうか?
なお今までよくやってきた、ブラウザーをGoogle 好みのChromeに切り替えてもダメでした。
Help Me
Tokyo ダンプ

投稿2019/04/08 08:47

Kiryu

総合スコア14

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

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

0

Form の発信をトリガーとして、メールを発信すると勝手に2回、3回と発信する問題で、1週間Script と格闘しました。結論的には、この問題の回答にあるように、「フォームの回答国目をすべて必須とする」という非論理的な方法で解決したことを報告します。
またメールが不用意に発信するケースとして、発信源となっているスプレッドシートの編集開始のタイミングでメールが発信することもありました。
参考までに試した方法は下記の通りですうまくいくとき間ありますが、安定しませんでしたが、必須に変更することで何とか安定したのが現状です。

1)トリガーを消去して再構築
2)フォーム、スプレッドシート、スクリプトの作り替え
3)Lock を追加
4)try catch を追加
5)メールは発信直後のsetValueを削除
6)メール発信直後に7秒程度のsleep
尚、必須に変更しても、上記6)のsleepを外すと2重発信の減少がありました。

過去この様な経験はありませんでした。最近Lock を使い始めたので、Lock と絡んでいるものと推測はしていますが、論理的な対処方法はわかりません。Tokyo ダンプ

投稿2019/04/08 02:56

Kiryu

総合スコア14

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

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

0

よく考えてみれば、これは至極もっともな仕様で、もし仮にトリガーが「編集」とみなされて機能していれば、
トリガーを使ったハウリングが起こりかねないからです。

aがbの内容を、bがaの内容を取得するようなコードにたいして、両方とも編集トリガーをかけてしまうと無限ループに陥ります。

改めて、回答ありがとうございました。

投稿2018/11/14 04:03

TD0

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問