回答編集履歴

1

追加

2023/05/12 05:01

投稿

bebebe_
bebebe_

スコア504

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
+ ```