回答編集履歴
12
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
Google Apps Script の現時点の仕様として、手入力**以外**によるスプレッドシートへ編集・変更が発生した際
|
1
|
+
Google Apps Script の現時点の仕様として、手入力**以外**によるスプレッドシートへの編集・変更が発生した際、当該編集・変更トリガーを確実に捕捉することはできず、また仮に捕捉できたとしても、どのセルが編集されたのかを確実に特定することはできません。
|
2
2
|
|
3
|
-
たとえば、当該スプレッドシートに紐ついていない別のGASによる
|
3
|
+
たとえば、当該スプレッドシートに紐ついていない別の GAS による自動転記や、Zappier 等他のウェブサービスによるスプレッドシートへの自動書き込みが行われた場合、書き込まれたことの検知を確実に行うことはできず、また、どの行・どの列・どのセルが書き込まれたかを確実に特定することも**できません**。
|
4
4
|
|
5
5
|
(特定のスプレッドシートの内容変更が行われたことを確実に捕捉したり、どのセルが変更されたかを確実に特定できるのは、手入力によって編集された場合に限ります)
|
6
6
|
|
11
test
CHANGED
@@ -6,8 +6,15 @@
|
|
6
6
|
|
7
7
|
したがって、本件におけるアプローチとしては、
|
8
8
|
スプレッドシートへ転記されたことを検知して転記された側のGASでSlackに飛ばすのではなく
|
9
|
-
**Slack への通知のトリガーとなる元々の処理
|
9
|
+
**Slack への通知のトリガーとなる元々の処理、つまり、特定内容のメールが届いたことを検知する処理に、Slack への通知内容の加工と通知処理を含める**しかないと考えられます。
|
10
|
+
|
10
|
-
|
11
|
+
(簡単にいうなら
|
12
|
+
+ メール検知 → スプレッドシートへの転記 → 転記されたことの検知 → SLACKへの通知
|
13
|
+
ではなく
|
14
|
+
+ メール検知 → SLACKへの通知 を同じGAS内で行う
|
15
|
+
ということ)
|
16
|
+
|
17
|
+
|
11
18
|
具体的には、下記のようになります。
|
12
19
|
① GMail から指定したメールが来たかどうか監視するスクリプトを「メール監視スクリプト」とします。
|
13
20
|
仮にこの「メール監視スクリプト」が仮にスタンドアロンスクリプトならば、メール監視スクリプトを、スプレッドシートのコンテナバインドスクリプトに変更します。
|
10
test
CHANGED
@@ -40,4 +40,4 @@
|
|
40
40
|
|
41
41
|
---
|
42
42
|
|
43
|
-
また、仮にメールを監視するスクリプトを管理しているのが別の人あって、自分では直接編集できないという場合は、上記の処理を含めるように、その担当者に依頼すればよいと思います。
|
43
|
+
また、仮にメールを監視するスクリプトを管理しているのが別の人であって、自分では直接編集できないという場合は、上記の処理を含めるように、その担当者に依頼すればよいと思います。
|
9
test
CHANGED
@@ -38,4 +38,6 @@
|
|
38
38
|
----
|
39
39
|
別シートを直接操作することもできなくはないですが、 SpreadsheetApp.flush() に相当する動作がなく、更新後データを別シートから確実に取得できる保証はないので、上記のような処理(スクリプトが紐ついたスプレッドシートのデータを取得)としています。
|
40
40
|
|
41
|
+
---
|
41
42
|
|
43
|
+
また、仮にメールを監視するスクリプトを管理しているのが別の人あって、自分では直接編集できないという場合は、上記の処理を含めるように、その担当者に依頼すればよいと思います。
|
8
test
CHANGED
@@ -31,7 +31,7 @@
|
|
31
31
|
↓
|
32
32
|
3'-3:Slack に飛ばしたいデータを、コンテナシートの適切な部分から取得する。
|
33
33
|
↓
|
34
|
-
3'-4:Slackへ通知する。
|
34
|
+
3'-4:3'-3 で取得したデータを加工し、Slackへ通知する。
|
35
35
|
|
36
36
|
※仮に、slackへ飛ばす内容を、コンテナシートとは別シート(質問で問題にしているスプレッドシート)へも記録しなければならない、という場合は、上記 3'-1 で別シートへの書き込み処理も追加すればよいでしょう。
|
37
37
|
|
7
test
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
|
26
26
|
このうち、3.の処理を、以下のように変えます。(コンテナシートは数式等をコピー済みですべて正しく動作しているという前提です)
|
27
27
|
|
28
|
-
3'-1:2.で取り出したデータを、コンテナシートの最新行の適切な位置に書き込む
|
28
|
+
3'-1:2.で取り出したメール内容のうち必要なデータを、コンテナシートの最新行の適切な位置に書き込む
|
29
29
|
↓
|
30
30
|
3'-2:SpreadsheetApp.flush() を実行してコンテナシートへの書き込み結果・計算式の計算結果を確実に更新する。
|
31
31
|
↓
|
6
test
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
|
28
28
|
3'-1:2.で取り出したデータを、コンテナシートの最新行の適切な位置に書き込む
|
29
29
|
↓
|
30
|
-
3'-2:SpreadsheetApp.flush() を実行してコンテナシートへの書き込み結果・計算式を確実に更新する。
|
30
|
+
3'-2:SpreadsheetApp.flush() を実行してコンテナシートへの書き込み結果・計算式の計算結果を確実に更新する。
|
31
31
|
↓
|
32
32
|
3'-3:Slack に飛ばしたいデータを、コンテナシートの適切な部分から取得する。
|
33
33
|
↓
|
5
test
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
|
28
28
|
3'-1:2.で取り出したデータを、コンテナシートの最新行の適切な位置に書き込む
|
29
29
|
↓
|
30
|
-
3'-2:SpreadsheetApp.flush() を実行してコンテナシートの書き込み結果・計算式を確実に更新する。
|
30
|
+
3'-2:SpreadsheetApp.flush() を実行してコンテナシートへの書き込み結果・計算式を確実に更新する。
|
31
31
|
↓
|
32
32
|
3'-3:Slack に飛ばしたいデータを、コンテナシートの適切な部分から取得する。
|
33
33
|
↓
|
@@ -35,5 +35,7 @@
|
|
35
35
|
|
36
36
|
※仮に、slackへ飛ばす内容を、コンテナシートとは別シート(質問で問題にしているスプレッドシート)へも記録しなければならない、という場合は、上記 3'-1 で別シートへの書き込み処理も追加すればよいでしょう。
|
37
37
|
|
38
|
+
----
|
39
|
+
別シートを直接操作することもできなくはないですが、 SpreadsheetApp.flush() に相当する動作がなく、更新後データを別シートから確実に取得できる保証はないので、上記のような処理(スクリプトが紐ついたスプレッドシートのデータを取得)としています。
|
38
40
|
|
39
41
|
|
4
test
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
|
26
26
|
このうち、3.の処理を、以下のように変えます。(コンテナシートは数式等をコピー済みですべて正しく動作しているという前提です)
|
27
27
|
|
28
|
-
3'-1:2.で取り出したデータを、コンテナシートの最
|
28
|
+
3'-1:2.で取り出したデータを、コンテナシートの最新行の適切な位置に書き込む
|
29
29
|
↓
|
30
30
|
3'-2:SpreadsheetApp.flush() を実行してコンテナシートの書き込み結果・計算式を確実に更新する。
|
31
31
|
↓
|
3
test
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
仮にこの「メール監視スクリプト」が仮にスタンドアロンスクリプトならば、メール監視スクリプトを、スプレッドシートのコンテナバインドスクリプトに変更します。
|
14
14
|
さらにここで、メール監視スクリプトに紐づけたスプレッドシートを、「コンテナシート」と呼称します。
|
15
15
|
|
16
|
-
②
|
16
|
+
② コンテナシートの内容は、現在メール内容を転記している別スプレッドシートと同じ構造にしておきます。つまり、VLOOKUP等の数式等必要なデータ全部、現在メール内容を転記しているスプレッドシートと同じように、コンテナシートに組む、ということです。
|
17
17
|
|
18
18
|
③ 「メール監視スクリプト」の内容については質問文に全く記載されていませんが、GASで組んでいるとのことなので、おそらく以下のような処理を行っていると推測されます。
|
19
19
|
1.トリガーを使用して一定間隔で特定のGMail アカウントを監視し、新着メールを取得、条件に合致するメールの有無を調べる
|
2
test
CHANGED
@@ -4,7 +4,9 @@
|
|
4
4
|
|
5
5
|
(特定のスプレッドシートの内容変更が行われたことを確実に捕捉したり、どのセルが変更されたかを確実に特定できるのは、手入力によって編集された場合に限ります)
|
6
6
|
|
7
|
+
したがって、本件におけるアプローチとしては、
|
8
|
+
スプレッドシートへ転記されたことを検知して転記された側のGASでSlackに飛ばすのではなく
|
7
|
-
|
9
|
+
**Slack への通知のトリガーとなる元々の処理(つまり、特定内容のメールを検知する処理)に、Slack への通知内容の加工と通知処理を含める**しかないと考えられます。
|
8
10
|
|
9
11
|
具体的には、下記のようになります。
|
10
12
|
① GMail から指定したメールが来たかどうか監視するスクリプトを「メール監視スクリプト」とします。
|
1
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
(特定のスプレッドシートの内容変更が行われたことを確実に捕捉したり、どのセルが変更されたかを確実に特定できるのは、手入力によって編集された場合に限ります)
|
6
6
|
|
7
|
-
したがって、本件におけるアプローチとしては、スプレッドシートへの自動転記を検知してSlackに飛ばすのではなく**Slack への通知のトリガーとなる元々の処理(つまり、特定内容のメールを検知する処理)に、Slack への通知内容の加工と通知処理を含める**しか
|
7
|
+
したがって、本件におけるアプローチとしては、スプレッドシートへの自動転記を検知してSlackに飛ばすのではなく**Slack への通知のトリガーとなる元々の処理(つまり、特定内容のメールを検知する処理)に、Slack への通知内容の加工と通知処理を含める**しかないと考えられます。
|
8
8
|
|
9
9
|
具体的には、下記のようになります。
|
10
10
|
① GMail から指定したメールが来たかどうか監視するスクリプトを「メール監視スクリプト」とします。
|