teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

実装したい内容

2020/08/11 09:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,10 +1,10 @@
1
1
  GAS超初心者のため、説明が不足しておりましたらご指摘下さい。
2
2
 
3
3
  やりたい事
4
- 下記スプレッドシートのD列が"送る"になっている場合、グループチャット内(B列)の特定の人(C列)にTOでタスク(A列の内容)を追加したい」
4
+ 「グループチャット内(A列)の特定の人(B列)にTOでタスク(E/F列の内容)を追加したい」
5
- https://docs.google.com/spreadsheets/d/13GSyTALYed_BebDpjrSj7yuCZsJxrzhQMa2btT6n-60/edit#gid=0
6
5
 
7
- 手動で実行したのですがどのようなスクリプトを組めば良いしょうか。
6
+ 上記につては下記スクリプトで実装できたのですが
7
+ 「スプレッドシートのG列が"〇"になっている場合」を追加したいのですが
8
8
  ご回答お待ちしております。
9
9
 
10
10
  ```

1

スクリプト内容の追加

2020/08/11 09:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -5,4 +5,150 @@
5
5
  https://docs.google.com/spreadsheets/d/13GSyTALYed_BebDpjrSj7yuCZsJxrzhQMa2btT6n-60/edit#gid=0
6
6
 
7
7
  手動で実行したいのですがどのようなスクリプトを組めば良いでしょうか。
8
- ご回答お待ちしております。
8
+ ご回答お待ちしております。
9
+
10
+ ```
11
+ function chatworkAutoPost(){
12
+ //*****************************************************
13
+ //初期設定
14
+ //*****************************************************
15
+
16
+ //chatworkのトークン
17
+ var tkn='ID';
18
+ //定期リストが入っているシート名の設定
19
+ var sn='定期作業'
20
+
21
+ //スプレッドシートのファイルID
22
+ var ssId='ID';
23
+
24
+ //タスクリストの最大の行数(あんまり多いと時間制限にひっかかるよ)
25
+ var maxRow=1000;
26
+
27
+
28
+ //*****************************************************
29
+ //メインメソッド
30
+ //*****************************************************
31
+ var ss=SpreadsheetApp.openById(ssId);
32
+ var s=ss.getSheetByName(sn);
33
+ var ld=new Date(); //今日の日付オブジェクト
34
+ var dt=new Date(); //今日の日付オブジェクト
35
+ var tanto;
36
+ var limit=0;
37
+ var message;
38
+
39
+ for(i=3;i<=maxRow;i++){
40
+ var rid = s.getRange(i, 1).getValue();
41
+ var flg=getShoriFlg(s.getRange(i, 3).getValue(),dt);
42
+
43
+ if(rid==''){
44
+ break;
45
+ }else{
46
+ if(flg==true){
47
+ //実際のAPI処理
48
+
49
+ //タスクの本文を作成
50
+ message='[info][title]';
51
+ message+=s.getRange(i, 5).getValue();
52
+ message+='[/title]';
53
+ message+=s.getRange(i, 6).getValue();
54
+ message+='[/info]';
55
+ message+='※これは自動に投稿されたタスクです';
56
+
57
+ //タスクの期限を決定
58
+ ld=new Date;
59
+ ld.setDate(dt.getDate()+s.getRange(i, 4).getValue());
60
+ limit=ld.getTime()/1000;
61
+ limit = limit.toFixed();
62
+
63
+ //タスクの担当者を取得
64
+ tanto=s.getRange(i, 2).getValue();
65
+
66
+ //タスクの追加処理
67
+ addTask(tkn,rid,message,limit,tanto);
68
+ }
69
+ }
70
+ }//next
71
+ }
72
+
73
+ //*****************************************************
74
+ //タスク追加処理メソッド
75
+ //*****************************************************
76
+ function addTask(token,room_id,body,limit,to_ids){
77
+ var params = {
78
+ headers : {"X-ChatWorkToken" : token}, //APIトークン
79
+ method : "post",
80
+ payload : {
81
+ body : body, //タスク内容
82
+ limit : limit, //タスク期限
83
+ to_ids : to_ids //アカウントID
84
+ }
85
+ };
86
+
87
+ Logger.log(params);
88
+
89
+ //タスク投稿実処理
90
+ var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks";
91
+ return UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト
92
+ }
93
+
94
+ //*****************************************************
95
+ //処理すべき日かの判定
96
+ //*****************************************************
97
+ function getShoriFlg(postdate,dt){
98
+ var flg=false;
99
+ var span=postdate.substr(0,4);
100
+
101
+ if(span=="[毎日]"){
102
+ flg=true;
103
+ }else if(span=="[毎週]"){
104
+ var d2;
105
+
106
+ switch(postdate.substr(4,1)){
107
+ case '月':
108
+ d2=1;
109
+ break;
110
+ case '火':
111
+ d2=2;
112
+ break;
113
+ case '水':
114
+ d2=3;
115
+ break;
116
+ case '木':
117
+ d2=4;
118
+ break;
119
+ case '金':
120
+ d2=5;
121
+ break;
122
+ case '土':
123
+ d2=6;
124
+ break;
125
+ case '日':
126
+ d2=0;
127
+ break;
128
+ }
129
+
130
+ if(dt.getDay()==d2){
131
+ flg=true;
132
+ }
133
+ }else if(span=="[平日]"){
134
+ if((dt.getDay()>=1)&(dt.getDay()<=5)){
135
+ flg=true;
136
+ }else{
137
+ flg=false;
138
+ }
139
+ }else if(span=="[毎月]"){
140
+ if(dt.getDate()==postdate.substr(4,2)){
141
+ flg=true;
142
+ }
143
+ }else if(span=="[月末]"){
144
+ if(new Date(dt.getFullYear(), dt.getMonth() + 1, 0).getDate()==dt.getDate()){
145
+ flg=true;
146
+ }
147
+ }else if(span=="[毎年]"){
148
+ if((dt.getMonth()+1==1)&(dt.getDate()==1)){
149
+ flg=true;
150
+ }
151
+ }
152
+ return flg;
153
+ }
154
+ ```