質問編集履歴

6

より詳しく記入。

2019/06/07 02:15

投稿

Junkak
Junkak

スコア20

test CHANGED
File without changes
test CHANGED
@@ -20,9 +20,7 @@
20
20
 
21
21
 
22
22
 
23
- Googleスプレッドシートで課題管理表を作成し、メール通知などの処理を自動化しよう | デザインってオモシロイ -MdN Design Interactive-
23
+ [Googleスプレッドシートで課題管理表を作成し、メール通知などの処理を自動化しよう | デザインってオモシロイ -MdN Design Interactive-](https://www.mdn.co.jp/di/contents/4047/54812/)
24
-
25
- https://www.mdn.co.jp/di/contents/4047/54812/
26
24
 
27
25
 
28
26
 

5

より詳しく記入。

2019/06/07 02:15

投稿

Junkak
Junkak

スコア20

test CHANGED
File without changes
test CHANGED
@@ -20,6 +20,14 @@
20
20
 
21
21
 
22
22
 
23
+ Googleスプレッドシートで課題管理表を作成し、メール通知などの処理を自動化しよう | デザインってオモシロイ -MdN Design Interactive-
24
+
25
+ https://www.mdn.co.jp/di/contents/4047/54812/
26
+
27
+
28
+
29
+ ```Google App Script
30
+
23
31
  // メールアドレスの設定
24
32
 
25
33
  var MAILADD = {
@@ -254,9 +262,7 @@
254
262
 
255
263
  };
256
264
 
257
-
258
-
259
- https://www.mdn.co.jp/di/contents/4047/54812/
265
+ ```
260
266
 
261
267
 
262
268
 

4

追記

2019/06/07 02:13

投稿

Junkak
Junkak

スコア20

test CHANGED
File without changes
test CHANGED
@@ -14,4 +14,250 @@
14
14
 
15
15
 
16
16
 
17
+ 【追記】
18
+
19
+ 下記のサイトに掲載されているコードが近いと思ったので、必要な部分のみを取り出して、自分の管理表に合わせて一部改変して試してみたのですが、私自身が全体を理解できていないため、正常に動かず(担当を入れると、同じ行のI列に「通知予定」と表示されるだけ)、混乱を避けるため、一旦破棄しました。
20
+
21
+
22
+
23
+ // メールアドレスの設定
24
+
25
+ var MAILADD = {
26
+
27
+  '阿部':'abe@example.com',
28
+
29
+  '佐藤':'sato@example.com'
30
+
31
+ };
32
+
33
+
34
+
35
+
36
+
37
+ // スプレットシートのアクティブを取得
38
+
39
+ var SS = SpreadsheetApp.getActive();
40
+
41
+ // アクティブなシートを取得
42
+
43
+ var SHEET = SS.getActiveSheet();
44
+
45
+
46
+
47
+ // 編集時
48
+
49
+ function onEdit(e) {
50
+
51
+
52
+
53
+  // 変更行
54
+
55
+  e.range.getLastColumn();
56
+
57
+  // 変更列
58
+
59
+  e.range.getLastRow();
60
+
61
+
62
+
63
+  // 依頼者が入力されたら
64
+
65
+  if(e.range.getLastColumn() === 3){
66
+
67
+   // 何か入力があれば
68
+
69
+   if(e.range.getValue()){
70
+
71
+     addEditDate(e.range.getLastColumn()+1,e.range.getLastRow());
72
+
73
+   }
74
+
75
+  }
76
+
77
+  
78
+
79
+  // 対応内容が入力されたら
80
+
81
+  if(e.range.getLastColumn() === 8){
82
+
83
+   // 何か入力があれば
84
+
85
+   if(e.range.getValue()){
86
+
87
+     addEditDate(e.range.getLastColumn()+1,e.range.getLastRow());
88
+
89
+   }
90
+
91
+  }
92
+
93
+  
94
+
95
+  // 担当者が入力されたら
96
+
97
+  if(e.range.getLastColumn() === 6){
98
+
99
+   range = SHEET.getRange(e.range.getLastRow(),e.range.getLastColumn()+1);
100
+
101
+   range.setValue('通知予定');
102
+
103
+  }
104
+
105
+  
106
+
107
+  // ステータスが変更されたら
108
+
109
+  if(e.range.getLastColumn() === 2){
110
+
111
+   // 完了の場合
112
+
113
+   if(e.range.getValue()=='完了'){
114
+
115
+
116
+
117
+    var changeRnages = "A" + e.range.getLastRow() + ":" + "I" + e.range.getLastRow();
118
+
119
+    var range = SHEET.getRange(changeRnages);
120
+
121
+    range.setBackground("#cccccc");
122
+
123
+    
124
+
125
+   }
126
+
127
+  }
128
+
129
+  
130
+
131
+  // 日付の差分
132
+
133
+  // dateDiff(new Date('2014/1/1'), new Date('2012/1/2')); // 1
134
+
135
+
136
+
137
+  // コメントを付与
138
+
139
+  //e.range.setComment("Edited by: " + e.user + new Date());
140
+
141
+ }
142
+
143
+
144
+
145
+
146
+
147
+ // 現在の日付を指定のセルに代入する
148
+
149
+ function addEditDate(c,r){
150
+
151
+  range = SHEET.getRange(r,c);
152
+
153
+  // 日付の代入
154
+
155
+  range.setValue(formatDate(new Date()));
156
+
157
+  
158
+
159
+ }
160
+
161
+
162
+
163
+ function checkNotification(){
164
+
165
+
166
+
167
+  // 複数行のセルを取得 (列, 行, 何列, 何行)
168
+
169
+  var ranges = SHEET.getRange(2, 7, 30 , 1).getValues();
170
+
171
+
172
+
173
+  for (var i = 0; i < ranges.length; i++) {
174
+
175
+
176
+
177
+   if(ranges[i] == '通知予定'){
178
+
179
+    var editRow = i + 2;
180
+
181
+    var editorName = SHEET.getRange(editRow,6).getValue();
182
+
183
+    Logger.log(editRow);
184
+
185
+    Logger.log(editorName);
186
+
187
+    
188
+
189
+    if(MAILADD[editorName]){
190
+
191
+     notificationSendEmail(MAILADD[editorName],editorName,'タスクが追加されました',7,editRow);
192
+
193
+    }else{
194
+
195
+      range = SHEET.getRange(editRow,7);
196
+
197
+      range.setValue('通知失敗');
198
+
199
+    }
200
+
201
+   }
202
+
203
+  }
204
+
205
+ }
206
+
207
+
208
+
209
+ // Emailの送信
210
+
211
+ // メールの送信は規約により1か、2を実行する必要がある
212
+
213
+ // 1.OAuth Developer Verification Formで承認を受ける
214
+
215
+ // https://support.google.com/code/contact/oauth_app_verification
216
+
217
+ // 2.Allow Risky Access Permissions By Unreviewed Appsのフォーラムに参加する
218
+
219
+ // https://groups.google.com/forum/#!forum/risky-access-by-unreviewed-apps
220
+
221
+ function notificationSendEmail(address,name,countData,col,row){
222
+
223
+  var mailBody = name + '様\n\n' + countData;
224
+
225
+  GmailApp.sendEmail(address,"タスクが追加されました" ,mailBody);
226
+
227
+
228
+
229
+  // ステータスの変更
230
+
231
+  range = SHEET.getRange(row,col);
232
+
233
+  range.setValue('通知済');
234
+
235
+ }
236
+
237
+
238
+
239
+
240
+
241
+ // 現在の日付を返す
242
+
243
+ function formatDate(date) {
244
+
245
+  var returnDate;
246
+
247
+  returnDate = date.getFullYear() + '/';
248
+
249
+  returnDate += date.getMonth() + 1 + '/';
250
+
251
+  returnDate += date.getDate();
252
+
253
+  return returnDate;
254
+
255
+ };
256
+
257
+
258
+
259
+ https://www.mdn.co.jp/di/contents/4047/54812/
260
+
261
+
262
+
17
263
  よろしくお願いいたします。m(_ _)m

3

初心者マークを追加

2019/06/07 02:11

投稿

Junkak
Junkak

スコア20

test CHANGED
File without changes
test CHANGED
File without changes

2

より詳しく記入。

2019/06/07 02:03

投稿

Junkak
Junkak

スコア20

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,13 @@
4
4
 
5
5
 
6
6
 
7
+ ※すでに入力された担当者に変更があった場合(たとえばAさん→Bさん)
8
+
9
+ ・新担当者のBさんには通常通り、メール通知&Googleカレンダー登録。
10
+
11
+ ・旧担当者のAさんには変更があった旨(「AさんからBさんに担当が変わりました」)をメール通知。
12
+
7
- ※さらに、もしGoogleスプレッドシートの「担当」に変更があれば、変更があった旨を変更前の担当と変更後担当者にメール通知し、変更前担当者のGoogleカレンダーに登録されたスケジュールは削除し、変更後の担当者のGoogleカレンダーに登録し直したいです。
13
+ ・旧担当者のAさんのGoogleカレンダーに登録されたスケジュールは削除し、担当者のBさんのGoogleカレンダーに登録す
8
14
 
9
15
 
10
16
 

1

タイトルをより正確な文言に修正

2019/06/06 10:04

投稿

Junkak
Junkak

スコア20

test CHANGED
@@ -1 +1 @@
1
- Googleスプレッドシートの管理表に入力したスケジュールを、担当者のGoogleカレンダーに登録したい
1
+ Googleスプレッドシートの管理表スケジュールを、担当者にメール通知&担当者のGoogleカレンダーに登録したい
test CHANGED
File without changes