回答編集履歴
3
解説
test
CHANGED
@@ -66,3 +66,43 @@
|
|
66
66
|
}
|
67
67
|
```
|
68
68
|

|
69
|
+
|
70
|
+
### C列やD列が何番目か
|
71
|
+
`const uncompletedTasks = range.getValues()` ←ここまでで全データが格納された2次元配列を生成しています。
|
72
|
+
```javascript
|
73
|
+
[
|
74
|
+
[ '<@ABCDEFGHI>', 'Clean the bath room', 'done' ],
|
75
|
+
[ '@Cocode', 'Take the garbage out', '' ],
|
76
|
+
[ '<@ABCDEFGHI>', 'Buy bananas', 'done' ],
|
77
|
+
[ '<@ABCDEFGHI>', 'Send email', '' ]
|
78
|
+
]
|
79
|
+
```
|
80
|
+
`[ '<@ABCDEFGHI>', 'Clean the bath room', 'done' ]`を例に見るとインデックス2番目の要素がC列です。
|
81
|
+
D列が存在する場合はインデックス3番目になるので、`task[3]`であっています。
|
82
|
+
|
83
|
+
私のコードの例の場合、取得してきた全データの中から、C列が空欄なものだけを`.filter()`で絞っています。
|
84
|
+
|
85
|
+
### 分割代入について
|
86
|
+
また分割代入という手法を使ってそれぞれの値を一括して変数に代入してやることができます。
|
87
|
+
|
88
|
+
例)
|
89
|
+
```javascript
|
90
|
+
const data = ['寺テイル', 30, 'male'];
|
91
|
+
const [name, age, gender] = data;
|
92
|
+
console.log(name); // '寺テイル'
|
93
|
+
console.log(age); // 30
|
94
|
+
console.log(gender); // 'male' が代入される
|
95
|
+
```
|
96
|
+
こんな感じです!
|
97
|
+
|
98
|
+
つまり、
|
99
|
+
```javascript
|
100
|
+
// ↓の部分は、
|
101
|
+
const [slackUserId, todo] = task;
|
102
|
+
|
103
|
+
// ↓例えばこうなってる
|
104
|
+
const [slackUserId, todo] = [ '<@ABCDEFGHI>', 'Send email', '' ];
|
105
|
+
console.log(slackUserId); // '<@ABCDEFGHI>'
|
106
|
+
console.log(todo); // 'Send email'
|
107
|
+
// あまった '' は無視。どこにも代入されていない。
|
108
|
+
```
|
2
tyぽ
test
CHANGED
@@ -18,6 +18,7 @@
|
|
18
18
|
```javascript
|
19
19
|
// 🚫 ただの文字になってしまうダメな例
|
20
20
|
@Cocode
|
21
|
+
@ABCDEFGHI
|
21
22
|
|
22
23
|
// ✅ 正しいメンション方法
|
23
24
|
<@ABCDEFGHI>
|
1
メンション
test
CHANGED
@@ -11,3 +11,57 @@
|
|
11
11
|
```
|
12
12
|
|
13
13
|
どちらかというと`.getValues()`の方が間違ってそうに見えるんですが…でもそちらの方は正常に動いてるんですよね?
|
14
|
+
|
15
|
+
### GASからSlackのメンションをつける方法
|
16
|
+
GASでSlackのメンションをつけるためには、`<@メンバーID>`と書かないといけないらしいです。
|
17
|
+
|
18
|
+
```javascript
|
19
|
+
// 🚫 ただの文字になってしまうダメな例
|
20
|
+
@Cocode
|
21
|
+
|
22
|
+
// ✅ 正しいメンション方法
|
23
|
+
<@ABCDEFGHI>
|
24
|
+
```
|
25
|
+
|
26
|
+
##### SlackメンバーIDの調べ方
|
27
|
+
1. IDを調べたいメンバーのアイコンをクリック
|
28
|
+
2. [...その他]というアイコンをクリック
|
29
|
+
3. 出てきたメニューのなかにある[メンバーIDをコピー]をクリック
|
30
|
+
4. ペーストすると、`ABCDEFGHI`のような文字列がでてくるので、<@ABCDEFGHI>とスプレッドシートに直接書いてしまったらいいと思います。
|
31
|
+
|
32
|
+
↓こんな感じ
|
33
|
+

|
34
|
+
|
35
|
+
### おまけのコード
|
36
|
+
↑のスクショの「Status」の列が空欄の行のみ、Slackで通知を送るようなコードをかきました。
|
37
|
+
ポイントとしては、GASとの通信回数を減らしているので処理が多少速いはずです。
|
38
|
+
|
39
|
+
```javascript
|
40
|
+
const SLACK_WEBHOOK_URL = '*****Webhook URLをここに入力*****';
|
41
|
+
|
42
|
+
function notifyUncompletedTaskToSlack() {
|
43
|
+
const sheet = SpreadsheetApp.getActiveSheet();
|
44
|
+
const range = sheet.getRange(2, 1, sheet.getLastRow()-1, sheet.getLastColumn());
|
45
|
+
const uncompletedTasks = range.getValues().filter(task => task[2].trim() === '');
|
46
|
+
|
47
|
+
for (const task of uncompletedTasks) {
|
48
|
+
const [slackUserId, todo] = task;
|
49
|
+
let msg = slackUserId + '\n';
|
50
|
+
msg += todo;
|
51
|
+
|
52
|
+
postSlack_(msg);
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
function postSlack_(message) {
|
57
|
+
const params = {
|
58
|
+
'method': 'POST',
|
59
|
+
'contentType': 'application/json',
|
60
|
+
'payload': JSON.stringify({'text': message})
|
61
|
+
};
|
62
|
+
|
63
|
+
const responce = UrlFetchApp.fetch(SLACK_WEBHOOK_URL, params);
|
64
|
+
Logger.log(responce);
|
65
|
+
}
|
66
|
+
```
|
67
|
+

|