回答編集履歴
1
追加
test
CHANGED
@@ -14,3 +14,99 @@
|
|
14
14
|
return false;
|
15
15
|
}
|
16
16
|
```
|
17
|
+
細かいことになりますが提示のコードの場合、毎日8:30に「remind」を実行するようにトリガー設定して「remind」中に土日祝を判断します。
|
18
|
+
それよりも今日が土日祝じゃなかった場合のみ8:30に「remind」を実行するようにトリガー設定したほうがスマート?な感じがしますね(もちろんどちらでも問題ないと思います。)
|
19
|
+
```ここに言語を入力
|
20
|
+
function remind (){
|
21
|
+
//リマインダー通知
|
22
|
+
const obj = SpreadsheetApp.openById('スプレットシートID');
|
23
|
+
const sheet = obj.getSheetByName('シートID');
|
24
|
+
|
25
|
+
//読み込んだシートの最終行を取得する
|
26
|
+
const lastrow = sheet.getLastRow();
|
27
|
+
var member = sheet.getRange(1,1,lastrow,2).getValues();
|
28
|
+
|
29
|
+
var message =
|
30
|
+
|
31
|
+
"おはようございます!本日の当番を発表します!\n\n■朝会\n\n<@"
|
32
|
+
+ member[0][1] +
|
33
|
+
">\n\n■加湿器\n\n<@"
|
34
|
+
+ member[1][1] +
|
35
|
+
">\n\n■給水器\n\n<@"
|
36
|
+
+ member[2][1] +
|
37
|
+
">\n\n■面談ルーム(水・金)\n\n今日も頑張りましょう~~!\nよろしくお願いします"
|
38
|
+
|
39
|
+
postToSlack(message)
|
40
|
+
|
41
|
+
// 担当者をローテーションさせる
|
42
|
+
// 配列の先頭にある要素を一番最後に移動させる
|
43
|
+
member.push(member.shift());
|
44
|
+
member.push(member.shift());
|
45
|
+
member.push(member.shift());
|
46
|
+
|
47
|
+
// シートにローテーション結果を記入する
|
48
|
+
sheet.getRange(1,1,lastrow,2).setValues(member);
|
49
|
+
|
50
|
+
//時間指定のトリガーを削除する
|
51
|
+
triggerDelete();
|
52
|
+
}
|
53
|
+
|
54
|
+
//土日祝日か判定する関数
|
55
|
+
function isHoliday(date) {
|
56
|
+
const id = 'ja.japanese#holiday@group.v.calendar.google.com';
|
57
|
+
const cal = CalendarApp.getCalendarById(id);
|
58
|
+
const events = cal.getEventsForDay(date);
|
59
|
+
const weekInt = date.getDay();
|
60
|
+
|
61
|
+
//dateが土日祝日いずれかの場合
|
62
|
+
if (weekInt <= 0 || 6 <= weekInt || events.length) {
|
63
|
+
return true;
|
64
|
+
}
|
65
|
+
return false;
|
66
|
+
}
|
67
|
+
|
68
|
+
function postToSlack(message){
|
69
|
+
const postUrl = 'スラックURL';
|
70
|
+
const data = {"channel":"チャンネネル名","username":"ユーザーネーム","text":message}
|
71
|
+
const payload = JSON.stringify(data);
|
72
|
+
const headers = {"Accept":"application/json",
|
73
|
+
"Content-Type":"application/json",
|
74
|
+
"Authorization":"Basic _authcode_"
|
75
|
+
};
|
76
|
+
const params = { "method" : "POST",
|
77
|
+
"contentType" : "application/json",
|
78
|
+
"headers" : headers,
|
79
|
+
"payload" : payload
|
80
|
+
};
|
81
|
+
UrlFetchApp.fetch(postUrl, params);
|
82
|
+
}
|
83
|
+
|
84
|
+
//自動実行する処理
|
85
|
+
function setTrigger(){
|
86
|
+
//Dateオブジェクトで実行した時間を取得
|
87
|
+
let time = new Date();
|
88
|
+
|
89
|
+
//土日祝の場合実行終了
|
90
|
+
if (isHoliday(time)) {
|
91
|
+
return;
|
92
|
+
}
|
93
|
+
|
94
|
+
//setHours,setMinutesでトリガー登録したい時間を設定
|
95
|
+
time.setHours(08);
|
96
|
+
time.setMinutes(30);
|
97
|
+
//newTriggerメソッドでtriggerTestを特定日時でトリガー登録
|
98
|
+
ScriptApp.newTrigger('remind').timeBased().at(time).create();
|
99
|
+
}
|
100
|
+
|
101
|
+
function triggerDelete() {
|
102
|
+
//GASプロジェクトに設定したトリガーをすべて取得
|
103
|
+
const triggers = ScriptApp.getProjectTriggers();
|
104
|
+
//トリガー登録のforループを実行
|
105
|
+
for(let i=0;i<triggers.length;i++){
|
106
|
+
//取得したトリガーの関数がremindの場合、deleteTriggerで削除
|
107
|
+
if(triggers[i].getHandlerFunction()==='remind'){
|
108
|
+
ScriptApp.deleteTrigger(triggers[i]);
|
109
|
+
}
|
110
|
+
}
|
111
|
+
}
|
112
|
+
```
|