GAS超初心者のため、説明が不足しておりましたらご指摘下さい。
やりたい事
「グループチャット内(A列)の特定の人(B列)にTOでタスク(E/F列の内容)を追加したい」
上記については下記スクリプトで実装できたのですが
「スプレッドシートのG列が"〇"になっている場合」を追加したいのですが
ご回答お待ちしております。
function chatworkAutoPost(){ //***************************************************** //初期設定 //***************************************************** //chatworkのトークン var tkn='ID'; //定期リストが入っているシート名の設定 var sn='定期作業' //スプレッドシートのファイルID var ssId='ID'; //タスクリストの最大の行数(あんまり多いと時間制限にひっかかるよ) var maxRow=1000; //***************************************************** //メインメソッド //***************************************************** var ss=SpreadsheetApp.openById(ssId); var s=ss.getSheetByName(sn); var ld=new Date(); //今日の日付オブジェクト var dt=new Date(); //今日の日付オブジェクト var tanto; var limit=0; var message; for(i=3;i<=maxRow;i++){ var rid = s.getRange(i, 1).getValue(); var flg=getShoriFlg(s.getRange(i, 3).getValue(),dt); if(rid==''){ break; }else{ if(flg==true){ //実際のAPI処理 //タスクの本文を作成 message='[info][title]'; message+=s.getRange(i, 5).getValue(); message+='[/title]'; message+=s.getRange(i, 6).getValue(); message+='[/info]'; message+='※これは自動に投稿されたタスクです'; //タスクの期限を決定 ld=new Date; ld.setDate(dt.getDate()+s.getRange(i, 4).getValue()); limit=ld.getTime()/1000; limit = limit.toFixed(); //タスクの担当者を取得 tanto=s.getRange(i, 2).getValue(); //タスクの追加処理 addTask(tkn,rid,message,limit,tanto); } } }//next } //***************************************************** //タスク追加処理メソッド //***************************************************** function addTask(token,room_id,body,limit,to_ids){ var params = { headers : {"X-ChatWorkToken" : token}, //APIトークン method : "post", payload : { body : body, //タスク内容 limit : limit, //タスク期限 to_ids : to_ids //アカウントID } }; Logger.log(params); //タスク投稿実処理 var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks"; return UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト } //***************************************************** //処理すべき日かの判定 //***************************************************** function getShoriFlg(postdate,dt){ var flg=false; var span=postdate.substr(0,4); if(span=="[毎日]"){ flg=true; }else if(span=="[毎週]"){ var d2; switch(postdate.substr(4,1)){ case '月': d2=1; break; case '火': d2=2; break; case '水': d2=3; break; case '木': d2=4; break; case '金': d2=5; break; case '土': d2=6; break; case '日': d2=0; break; } if(dt.getDay()==d2){ flg=true; } }else if(span=="[平日]"){ if((dt.getDay()>=1)&(dt.getDay()<=5)){ flg=true; }else{ flg=false; } }else if(span=="[毎月]"){ if(dt.getDate()==postdate.substr(4,2)){ flg=true; } }else if(span=="[月末]"){ if(new Date(dt.getFullYear(), dt.getMonth() + 1, 0).getDate()==dt.getDate()){ flg=true; } }else if(span=="[毎年]"){ if((dt.getMonth()+1==1)&(dt.getDate()==1)){ flg=true; } } return flg; }
>どのようなスクリプトを組めば良いでしょうか。
どこまでできているのでしょうか?
ご回答ありがとうございます!
https://docs.google.com/spreadsheets/d/1liiWTOUWQNFXJKIw1XxULRFNbAC2eMJpp1JKIA8BXHQ/edit?usp=sharing
こちらのスプレッドシートのスクリプト見れますでしょうか?」
【グループチャット内(A列)の特定の人(B列)にTOでタスク(E/F列の内容)を追加】までは実装確認済みです。
上記に【H列が〇の場合】を追加したいです。
chatworkのtokenなどが見えてしまっているので、今すぐ非公開にしてください。
その上で、tokenなどを伏せ字にして、質問にスクリプトを転記してください。
ご指摘ありがとうございます。
スクリプト下記になります。
function chatworkAutoPost(){
//*****************************************************
//初期設定
//*****************************************************
//chatworkのトークン
var tkn='ID';
//定期リストが入っているシート名の設定
var sn='定期作業'
//スプレッドシートのファイルID
var ssId='ID';
//タスクリストの最大の行数(あんまり多いと時間制限にひっかかるよ)
var maxRow=1000;
//*****************************************************
//メインメソッド
//*****************************************************
var ss=SpreadsheetApp.openById(ssId);
var s=ss.getSheetByName(sn);
var ld=new Date(); //今日の日付オブジェクト
var dt=new Date(); //今日の日付オブジェクト
var tanto;
var limit=0;
var message;
for(i=3;i<=maxRow;i++){
var rid = s.getRange(i, 1).getValue();
var flg=getShoriFlg(s.getRange(i, 3).getValue(),dt);
if(rid==''){
break;
}else{
if(flg==true){
//実際のAPI処理
//タスクの本文を作成
message='[info][title]';
message+=s.getRange(i, 5).getValue();
message+='[/title]';
message+=s.getRange(i, 6).getValue();
message+='[/info]';
message+='※これは自動に投稿されたタスクです';
//タスクの期限を決定
ld=new Date;
ld.setDate(dt.getDate()+s.getRange(i, 4).getValue());
limit=ld.getTime()/1000;
limit = limit.toFixed();
//タスクの担当者を取得
tanto=s.getRange(i, 2).getValue();
//タスクの追加処理
addTask(tkn,rid,message,limit,tanto);
}
}
}//next
}
//*****************************************************
//タスク追加処理メソッド
//*****************************************************
function addTask(token,room_id,body,limit,to_ids){
var params = {
headers : {"X-ChatWorkToken" : token}, //APIトークン
method : "post",
payload : {
body : body, //タスク内容
limit : limit, //タスク期限
to_ids : to_ids //アカウントID
}
};
Logger.log(params);
//タスク投稿実処理
var url = "https://api.chatwork.com/v2/rooms/" + room_id + "/tasks";
return UrlFetchApp.fetch(url, params); //チャットワークAPIにリクエスト
}
//*****************************************************
//処理すべき日かの判定
//*****************************************************
function getShoriFlg(postdate,dt){
var flg=false;
var span=postdate.substr(0,4);
if(span=="[毎日]"){
flg=true;
}else if(span=="[毎週]"){
var d2;
switch(postdate.substr(4,1)){
case '月':
d2=1;
break;
case '火':
d2=2;
break;
case '水':
d2=3;
break;
case '木':
d2=4;
break;
case '金':
d2=5;
break;
case '土':
d2=6;
break;
case '日':
d2=0;
break;
}
if(dt.getDay()==d2){
flg=true;
}
}else if(span=="[平日]"){
if((dt.getDay()>=1)&(dt.getDay()<=5)){
flg=true;
}else{
flg=false;
}
}else if(span=="[毎月]"){
if(dt.getDate()==postdate.substr(4,2)){
flg=true;
}
}else if(span=="[月末]"){
if(new Date(dt.getFullYear(), dt.getMonth() + 1, 0).getDate()==dt.getDate()){
flg=true;
}
}else if(span=="[毎年]"){
if((dt.getMonth()+1==1)&(dt.getDate()==1)){
flg=true;
}
}
return flg;
}
読みにくくて仕方ないので、マークダウンで質問に追記してください
失礼いたしました。
追記しました。
内容、わかりますでしょうか??
回答1件
あなたの回答
tips
プレビュー