回答編集履歴
5
answer
CHANGED
@@ -99,4 +99,8 @@
|
|
99
99
|
- postToSlack(message);
|
100
100
|
|
101
101
|
}
|
102
|
+
|
103
|
+
function postToSlack(message) {
|
104
|
+
...略...
|
105
|
+
}
|
102
106
|
```
|
4
answer
CHANGED
@@ -39,26 +39,8 @@
|
|
39
39
|
書き込んでいるGASを使って最終的なSlackの投稿処理まで行う、ということです)
|
40
40
|
|
41
41
|
具体的には、書き込み用のGASでD列にメールアドレスを書き込んだ後、続けて数式が入っているセル(E列~I列まで)を読み取ってSlackに投稿する、という流れです。
|
42
|
-
|
42
|
+
以下のように、**スプレッドシートのA列~D列に書き込む処理の後に、Slack投稿用のコードを継ぎ足してみてはいかがでしょうか**?
|
43
|
-
```
|
44
|
-
function writeMailAddress() {
|
45
43
|
|
46
|
-
const ss = SpreadsheetApp.openById("書き込み先のスプレッドシートID");
|
47
|
-
const sh = ss.getSheetByName("errordata_gmail");
|
48
|
-
|
49
|
-
// 書き込むメールアドレス
|
50
|
-
const mailAddress = "aa@aaa.com";
|
51
|
-
|
52
|
-
// 書き込み先の行番号(ここでは簡便のため固定値(10)にしているが、forループを使っている場合はその変数に読み替えてもよい)
|
53
|
-
const writeRow = 10;
|
54
|
-
|
55
|
-
// メールアドレスを「writeRow行目、D列」に書き込む
|
56
|
-
sh.getRange(writeRow, 4).setValue(mailAddress);
|
57
|
-
}
|
58
|
-
```
|
59
|
-
|
60
|
-
これを使ってSlackに投稿したいなら、以下のように、**上記の続きに、Slack投稿用のコードを継ぎ足してみてはいかがでしょうか**?
|
61
|
-
|
62
44
|
(先頭が「+」となっている行は追加、「-」となっている行は削除)
|
63
45
|
```diff
|
64
46
|
//送付エラーのタイムスタンプ/件名/本文/メールIDをスプレッドシートに吐き出す
|
3
修正
answer
CHANGED
@@ -59,50 +59,62 @@
|
|
59
59
|
|
60
60
|
これを使ってSlackに投稿したいなら、以下のように、**上記の続きに、Slack投稿用のコードを継ぎ足してみてはいかがでしょうか**?
|
61
61
|
|
62
|
+
(先頭が「+」となっている行は追加、「-」となっている行は削除)
|
62
|
-
```
|
63
|
+
```diff
|
63
|
-
|
64
|
+
//送付エラーのタイムスタンプ/件名/本文/メールIDをスプレッドシートに吐き出す
|
64
65
|
|
66
|
+
function getGmailToSS() {
|
65
|
-
const ss = SpreadsheetApp.
|
67
|
+
const ss = SpreadsheetApp.getActiveSpreadsheet();
|
66
|
-
const
|
68
|
+
const sheet = ss.getSheetByName('errordata_gmail');
|
67
69
|
|
68
|
-
// 書き込むメールアドレス
|
69
|
-
const
|
70
|
+
const searchlabel = '"送付エラー"';
|
70
71
|
|
71
|
-
|
72
|
+
const threads = GmailApp.search('label:(' + searchlabel + ') -label:処理済み');
|
72
|
-
const writeRow = 10;
|
73
73
|
|
74
|
-
// メールアドレスを「writeRow行目、D列」に書き込む
|
75
|
-
|
74
|
+
const msgIdArray = sheet.getRange("D:D").getValues().filter(String).flat();
|
75
|
+
let lastRow = msgIdArray.length + 1;
|
76
76
|
|
77
|
+
for (const n in threads) {
|
78
|
+
const thread = threads[n];
|
77
|
-
|
79
|
+
const msgs = thread.getMessages();
|
80
|
+
msgs
|
78
81
|
|
79
|
-
|
82
|
+
for (m in msgs) {
|
80
|
-
const staffErrorEmail = sh.getRange(writeRow, 5).getValue(); //5=E列(送付エラーアドレス)
|
81
|
-
|
83
|
+
const msg = msgs[m];
|
82
|
-
|
84
|
+
const id = msg.getId();
|
83
|
-
const slackId = sh.getRange(writeRow, 9).getValue(); //9=I列(SlackID)
|
84
85
|
|
85
|
-
|
86
|
+
if (msgIdArray.includes(id)) continue; //IDがD列に既に存在する場合はスルー
|
86
|
-
postToSlack(message);
|
87
87
|
|
88
|
-
}
|
89
88
|
|
89
|
+
const msgData = [[msg.getDate(), msg.getSubject(), msg.getPlainBody(), id]];
|
90
|
+
sheet.getRange(lastRow, 1, 1, 4).setValues(msgData); //まとめて書き込み
|
90
91
|
|
91
|
-
function postToSlack(message) {
|
92
|
-
const postToMDS = "通知先のWebhooksURL";
|
93
|
-
const jsonData = {
|
94
|
-
"text": message,
|
95
|
-
};
|
96
92
|
|
93
|
+
+ // スプレッドシートから必要なデータを読み取り、スラックに投稿する。
|
94
|
+
+ const staffErrorEmail = sheet.getRange(lastRow, 5).getValue(); //5=E列(送付エラーアドレス)
|
95
|
+
+ const staffName = sheet.getRange(lastRow, 6).getValue(); //6=F列(スタッフ名)
|
96
|
+
+ const temphireId = sheet.getRange(lastRow, 7).getValue(); //7=G列(ID)
|
97
|
+
+ const slackId = sheet.getRange(lastRow, 9).getValue(); //9=I列(SlackID)
|
98
|
+
+ const message = slackId + '\n' + staffName + '\n' + staffErrorEmail + temphireId;
|
97
|
-
|
99
|
+
+ postToSlack(message);
|
98
100
|
|
99
|
-
|
101
|
+
lastRow++
|
100
|
-
"method": "post",
|
101
|
-
"contentType": "application/json",
|
102
|
-
"payload": payload,
|
103
|
-
|
102
|
+
}
|
104
103
|
|
104
|
+
|
105
|
+
const label = GmailApp.getUserLabelByName('処理済み');
|
106
|
+
thread.addLabel(label);
|
107
|
+
}
|
108
|
+
|
109
|
+
|
105
|
-
|
110
|
+
- // スプレッドシートから必要なデータを読み取り、スラックに投稿する。
|
111
|
+
- const staffErrorEmail = sh.getRange(writeRow, 5).getValue(); //5=E列(送付エラーアドレス)
|
112
|
+
- const staffName = sh.getRange(writeRow, 6).getValue(); //6=F列(スタッフ名)
|
113
|
+
- const temphireId = sh.getRange(writeRow, 7).getValue(); //7=G列(ID)
|
114
|
+
- const slackId = sh.getRange(writeRow, 9).getValue(); //9=I列(SlackID)
|
115
|
+
|
116
|
+
- const message = slackId + '\n' + staffName + '\n' + staffErrorEmail + temphireId;
|
106
|
-
|
117
|
+
- postToSlack(message);
|
118
|
+
|
107
119
|
}
|
108
120
|
```
|
2
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
ただし、たとえば、GoogleスプレッドシートのAppSheetという機能による書き込みについては、「変更時」トリガーであれば書き込みがあったことを検知し、書き込まれたセルがActiveCellになるということは確認できています。(「編集時」トリガーでは検知不可)
|
6
6
|
したがって、限られた場面では、スプレッドシートへ直接手動入力する場合以外であっても「変更」トリガーで検知できる可能性はあるかもしれません。
|
7
7
|
|
8
|
-
コメントでの質問に対する回答によると、今回I列への文字入力は「手動入力ではない」とのことですが、どのよう
|
8
|
+
コメントでの質問に対する回答によると、今回I列への文字入力は「手動入力ではない」とのことですが、どのような手段を用いて自動入力しているのかについての詳細が開示されておりませんので、質問者さんの使用状況で「変更時」でも検知できるかどうかはこちらではわかりかねます。
|
9
9
|
|
10
10
|
いずれにしても下記コードに直したうえで、トリガーを「編集時」から「変更時」に変更して保存した場合、もしかしたら検知できるかもしれません。
|
11
11
|
```js
|
1
追記
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
ただし、たとえば、GoogleスプレッドシートのAppSheetという機能による書き込みについては、「変更時」トリガーであれば書き込みがあったことを検知し、書き込まれたセルがActiveCellになるということは確認できています。(「編集時」トリガーでは検知不可)
|
6
6
|
したがって、限られた場面では、スプレッドシートへ直接手動入力する場合以外であっても「変更」トリガーで検知できる可能性はあるかもしれません。
|
7
7
|
|
8
|
-
コメントでの質問に対する回答によると、今回I列への文字入力は「手動入力ではない」とのことですが、どのように自動入力されるのかという詳細が開示されておりませんので、質問者さんの使用状況で「変更時」でも検知できるかどうかはこちらではわかりかねます。
|
8
|
+
コメントでの質問に対する回答によると、今回I列への文字入力は「手動入力ではない」とのことですが、どのように自動入力されるのかという詳細が開示され「ておりませんので、質問者さんの使用状況で「変更時」でも検知できるかどうかはこちらではわかりかねます。
|
9
9
|
|
10
10
|
いずれにしても下記コードに直したうえで、トリガーを「編集時」から「変更時」に変更して保存した場合、もしかしたら検知できるかもしれません。
|
11
11
|
```js
|
@@ -28,6 +28,81 @@
|
|
28
28
|
|
29
29
|
const message = slackId + '\n' + staffName + '\n' + staffErrorEmail + temphireId ;
|
30
30
|
postToSlack(message);
|
31
|
+
```
|
31
32
|
|
33
|
+
--------
|
32
34
|
|
35
|
+
# コメントを受けて追記
|
36
|
+
「GASを使ってD列にメールアドレスを書き込んでいる」とのことなので、
|
37
|
+
アプローチを変えて、その**書き込むGASの方を改造**すればよいと思います。
|
38
|
+
(書き込まれるスプレッドシートの方で書き込まれたことを検知するのではなく、
|
39
|
+
書き込んでいるGASを使って最終的なSlackの投稿処理まで行う、ということです)
|
40
|
+
|
41
|
+
具体的には、書き込み用のGASでD列にメールアドレスを書き込んだ後、続けて数式が入っているセル(E列~I列まで)を読み取ってSlackに投稿する、という流れです。
|
42
|
+
たとえば、現状、書き込み用のGASが下のようになっていると仮定します。
|
43
|
+
```
|
44
|
+
function writeMailAddress() {
|
45
|
+
|
46
|
+
const ss = SpreadsheetApp.openById("書き込み先のスプレッドシートID");
|
47
|
+
const sh = ss.getSheetByName("errordata_gmail");
|
48
|
+
|
49
|
+
// 書き込むメールアドレス
|
50
|
+
const mailAddress = "aa@aaa.com";
|
51
|
+
|
52
|
+
// 書き込み先の行番号(ここでは簡便のため固定値(10)にしているが、forループを使っている場合はその変数に読み替えてもよい)
|
53
|
+
const writeRow = 10;
|
54
|
+
|
55
|
+
// メールアドレスを「writeRow行目、D列」に書き込む
|
56
|
+
sh.getRange(writeRow, 4).setValue(mailAddress);
|
57
|
+
}
|
58
|
+
```
|
59
|
+
|
60
|
+
これを使ってSlackに投稿したいなら、以下のように、**上記の続きに、Slack投稿用のコードを継ぎ足してみてはいかがでしょうか**?
|
61
|
+
|
62
|
+
```
|
63
|
+
function writeMailAddress() {
|
64
|
+
|
65
|
+
const ss = SpreadsheetApp.openById("書き込み先のスプレッドシートID");
|
66
|
+
const sh = ss.getSheetByName("errordata_gmail");
|
67
|
+
|
68
|
+
// 書き込むメールアドレス
|
69
|
+
const mailAddress = "aa@aaa.com";
|
70
|
+
|
71
|
+
// 書き込み先の行番号(ここでは簡便のため固定値(10)にしているが、forループを使っている場合はその変数に読み替えてもよい)
|
72
|
+
const writeRow = 10;
|
73
|
+
|
74
|
+
// メールアドレスを「writeRow行目、D列」に書き込む
|
75
|
+
sh.getRange(writeRow, 4).setValue(mailAddress);
|
76
|
+
|
77
|
+
/**************以下 追加部分*****************/
|
78
|
+
|
79
|
+
// スプレッドシートから必要なデータを読み取り、スラックに投稿する。
|
80
|
+
const staffErrorEmail = sh.getRange(writeRow, 5).getValue(); //5=E列(送付エラーアドレス)
|
81
|
+
const staffName = sh.getRange(writeRow, 6).getValue(); //6=F列(スタッフ名)
|
82
|
+
const temphireId = sh.getRange(writeRow, 7).getValue(); //7=G列(ID)
|
83
|
+
const slackId = sh.getRange(writeRow, 9).getValue(); //9=I列(SlackID)
|
84
|
+
|
85
|
+
const message = slackId + '\n' + staffName + '\n' + staffErrorEmail + temphireId;
|
86
|
+
postToSlack(message);
|
87
|
+
|
88
|
+
}
|
89
|
+
|
90
|
+
|
91
|
+
function postToSlack(message) {
|
92
|
+
const postToMDS = "通知先のWebhooksURL";
|
93
|
+
const jsonData = {
|
94
|
+
"text": message,
|
95
|
+
};
|
96
|
+
|
97
|
+
const payload = JSON.stringify(jsonData);
|
98
|
+
|
99
|
+
const options = {
|
100
|
+
"method": "post",
|
101
|
+
"contentType": "application/json",
|
102
|
+
"payload": payload,
|
103
|
+
};
|
104
|
+
|
105
|
+
// リクエスト
|
106
|
+
UrlFetchApp.fetch(postToMDS, options);
|
107
|
+
}
|
33
108
|
```
|