回答編集履歴

12

 

2022/11/06 07:32

投稿

退会済みユーザー
test CHANGED
@@ -1,6 +1,6 @@
1
- Google Apps Script の現時点の仕様として、手入力**以外**によるスプレッドシートへ編集・変更が発生した際確実に編集・変更トリガーを捕捉することはできず、また仮に捕捉できたとしても、どのセルが書き込まれたのかを確実に特定することはできません。
1
+ Google Apps Script の現時点の仕様として、手入力**以外**によるスプレッドシートへ編集・変更が発生した際、当該編集・変更トリガーを確実に捕捉することはできず、また仮に捕捉できたとしても、どのセルが編集されたのかを確実に特定することはできません。
2
2
 
3
- たとえば、当該スプレッドシートに紐ついていない別のGASによるスプレッドシートへの自動転記や、Zappier等他のウェブサービスによるスプレッドシートへの自動書き込みが行われた場合、書き込まれたことの検知を確実に行うことはできず、また、どの行・どの列・どのセルが書き込まれたかを確実に特定することも**できません**。
3
+ たとえば、当該スプレッドシートに紐ついていない別の GAS による自動転記や、Zappier 等他のウェブサービスによるスプレッドシートへの自動書き込みが行われた場合、書き込まれたことの検知を確実に行うことはできず、また、どの行・どの列・どのセルが書き込まれたかを確実に特定することも**できません**。
4
4
 
5
5
  (特定のスプレッドシートの内容変更が行われたことを確実に捕捉したり、どのセルが変更されたかを確実に特定できるのは、手入力によって編集された場合に限ります)
6
6
 

11

 

2022/11/06 06:55

投稿

退会済みユーザー
test CHANGED
@@ -6,8 +6,15 @@
6
6
 
7
7
  したがって、本件におけるアプローチとしては、
8
8
  スプレッドシートへ転記されたことを検知して転記された側のGASでSlackに飛ばすのではなく
9
- **Slack への通知のトリガーとなる元々の処理つまり、特定内容のメールを検知する処理に、Slack への通知内容の加工と通知処理を含める**しかないと考えられます。
9
+ **Slack への通知のトリガーとなる元々の処理つまり、特定内容のメールが届いたことを検知する処理に、Slack への通知内容の加工と通知処理を含める**しかないと考えられます。
10
+  
10
-
11
+ (簡単にいうなら
12
+ + メール検知 → スプレッドシートへの転記 → 転記されたことの検知 → SLACKへの通知
13
+ ではなく
14
+ + メール検知 → SLACKへの通知  を同じGAS内で行う
15
+ ということ)
16
+  
17
+  
11
18
  具体的には、下記のようになります。
12
19
  ① GMail から指定したメールが来たかどうか監視するスクリプトを「メール監視スクリプト」とします。
13
20
  仮にこの「メール監視スクリプト」が仮にスタンドアロンスクリプトならば、メール監視スクリプトを、スプレッドシートのコンテナバインドスクリプトに変更します。

10

 

2022/11/06 06:37

投稿

退会済みユーザー
test CHANGED
@@ -40,4 +40,4 @@
40
40
 
41
41
  ---
42
42
 
43
- また、仮にメールを監視するスクリプトを管理しているのが別の人あって、自分では直接編集できないという場合は、上記の処理を含めるように、その担当者に依頼すればよいと思います。
43
+ また、仮にメールを監視するスクリプトを管理しているのが別の人あって、自分では直接編集できないという場合は、上記の処理を含めるように、その担当者に依頼すればよいと思います。

9

 

2022/11/06 06:37

投稿

退会済みユーザー
test CHANGED
@@ -38,4 +38,6 @@
38
38
  ----
39
39
  別シートを直接操作することもできなくはないですが、 SpreadsheetApp.flush() に相当する動作がなく、更新後データを別シートから確実に取得できる保証はないので、上記のような処理(スクリプトが紐ついたスプレッドシートのデータを取得)としています。
40
40
 
41
+ ---
41
42
 
43
+ また、仮にメールを監視するスクリプトを管理しているのが別の人あって、自分では直接編集できないという場合は、上記の処理を含めるように、その担当者に依頼すればよいと思います。

8

 

2022/11/06 06:35

投稿

退会済みユーザー
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

 

2022/11/06 06:34

投稿

退会済みユーザー
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

 

2022/11/06 06:33

投稿

退会済みユーザー
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

  

2022/11/06 06:33

投稿

退会済みユーザー
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

 

2022/11/06 06:30

投稿

退会済みユーザー
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

 

2022/11/06 06:29

投稿

退会済みユーザー
test CHANGED
@@ -13,7 +13,7 @@
13
13
  仮にこの「メール監視スクリプト」が仮にスタンドアロンスクリプトならば、メール監視スクリプトを、スプレッドシートのコンテナバインドスクリプトに変更します。
14
14
  さらにここで、メール監視スクリプトに紐づけたスプレッドシートを、「コンテナシート」と呼称します。
15
15
 
16
- 記録コンテナシートの内容は、現在メール内容を転記している別スプレッドシートと同じ構造にします。つまり、VLOOKUP等の数式等必要なデータ全部、現在メール内容を転記しているスプレッドシートと同じように組む、ということです。
16
+ ② コンテナシートの内容は、現在メール内容を転記している別スプレッドシートと同じ構造にしておきます。つまり、VLOOKUP等の数式等必要なデータ全部、現在メール内容を転記しているスプレッドシートと同じように、コンテナシートに組む、ということです。
17
17
 
18
18
  ③ 「メール監視スクリプト」の内容については質問文に全く記載されていませんが、GASで組んでいるとのことなので、おそらく以下のような処理を行っていると推測されます。
19
19
  1.トリガーを使用して一定間隔で特定のGMail アカウントを監視し、新着メールを取得、条件に合致するメールの有無を調べる

2

 

2022/11/06 06:28

投稿

退会済みユーザー
test CHANGED
@@ -4,7 +4,9 @@
4
4
 
5
5
  (特定のスプレッドシートの内容変更が行われたことを確実に捕捉したり、どのセルが変更されたかを確実に特定できるのは、手入力によって編集された場合に限ります)
6
6
 
7
+ したがって、本件におけるアプローチとしては、
8
+ スプレッドシートへ転記されたことを検知して転記された側のGASでSlackに飛ばすのではなく
7
- したがって、本件におけるアプローチとしては、スプレッドシートへの自動転記を検知してSlackに飛ばすのではなく**Slack への通知のトリガーとなる元々の処理(つまり、特定内容のメールを検知する処理)に、Slack への通知内容の加工と通知処理を含める**しかないと考えられます。
9
+ **Slack への通知のトリガーとなる元々の処理(つまり、特定内容のメールを検知する処理)に、Slack への通知内容の加工と通知処理を含める**しかないと考えられます。
8
10
 
9
11
  具体的には、下記のようになります。
10
12
  ① GMail から指定したメールが来たかどうか監視するスクリプトを「メール監視スクリプト」とします。

1

 

2022/11/06 06:27

投稿

退会済みユーザー
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 から指定したメールが来たかどうか監視するスクリプトを「メール監視スクリプト」とします。