4


少し指導が必要です!

特定の基準が満たされたときにユーザーにメールを送信し、その行を「メール」としてマークするように設計されたGoogleスプレッドシート用の簡単なスクリプトを作成しました。onEditトリガーで実行され、うまく機能します。
ただし、複数のトリガーが有効なユーザーが同時にシートを開いている場合は、各アカウントから同じメールが送信されます。

私は使ってみました:

function onChange(e) {
    if (ROW HASN'T BEEN EMAILED ALREADY) {
       if (3 CELLS IN A ROW HAVE CONTENT) {
           if (Session.getActiveUser().getEmail() == e.user.getUserLoginId()) {
              SEND THE EMAIL
              MARK ROW AS EMAILED
           }
        }
    }
}

ただし、変更を加えたユーザーのみが電子メールを送信するように、すべてのユーザーは引き続き電子メールを送信します。Session.getActiveUser().getEmail()私は値を比較しe.user.getUserLoginId()て手動で生成しましたが、理論的には機能するはずです...明らかに私は何か間違ったことをしています!

ありがとう。

4

1 に答える 1

3

これは少し紛らわしいトピックですが、これは正しく機能していると思います。

ここにいくつかの詳細があります。

  1. onChange(e)関数では、e.user常にドキュメントを「所有」する人になります。ドキュメント内のイベントについては、このページの下部をご覧ください。本質的に、どのユーザーの変更によってトリガーが発生したかを特定することはできません。
  2. イベントに対してトリガーを持つユーザーが 2 人いるonEdit場合、ユーザーの 1 人だけがスプレッドシートを開いている場合でも、両方のトリガーが毎回実行されます (基本的に関数は 2 回実行されます)。ただし、#1によると、トリガー関数の実行内で、どのユーザーの変更がonEditイベントを引き起こしたかを把握することはできません

ワークフローを少し再考する必要があります。おそらく、電子メールを送信する人を 1 時間ごとにチェックする時間指定トリガーなどです。もう 1 つのオプションは、ドキュメント所有者として実行されるトリガーを 1 つだけ持つことで、そこでチェック ロジックを実行できます。これが理にかなっていることを願っています。

于 2012-12-05T20:27:05.420 に答える