Google Apps Script で当日タスクの抽出とメール配信

 

上記の方法ではループ内の処理が多く、終了までに時間がかかっていたため、シートデータをすべて配列に読み込む処理に変更。

多分1/100以下の処理時間になったはず・・・。

開始と終了を同時に別の1シートに書き出し、メールで送る処理に変更。

function getStartEnd() {  var masterSheet ="スケジュールマスタ"; var outputSheet2 = "本日開始&終了タスク"; var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName(masterSheet); var sheet2 = ss.getSheetByName(outputSheet2); var lastRow =sheet.getLastRow(); var today = Math.floor(new Date().getTime()/1000/24/60/60)-1; var exceptions =["除外1","除外2"]; var limitDay; var row=1;//行詰めでセットするためのカウンタ   // 配列に全データ var Values= sheet.getDataRange().getValues();  //clear sheet sheet2.clear();   sheet2.getRange(row++,3).setValue("本日開始タスク").setBackgroundColor("#CEF");  //本日開始タスク抽出 for (var i=1 ; i <= lastRow; i++){  limitDay=Math.floor(Values[i-1][6]/1000/24/60/60);  if ((limitDay == today) && (exceptions.indexOf(Values[i-1][4])== -1 )){ for (var ii = 1; ii <= 8; ii++){ sheet2.getRange(row,ii).setValue(Values[i-1][ii-1]); } }else{ row--; } row++;   }   //行開け row++;   sheet2.getRange(row++,3).setValue("本日終了タスク").setBackgroundColor("#CEF");  //本日終了タスク抽出 for (var i=1 ; i <= lastRow; i++){  limitDay=Math.floor(Values[i-1][5]/1000/24/60/60);  if ((limitDay == today) && (exceptions.indexOf(Values[i-1][4])== -1 )){ for (var ii = 1; ii <= 8; ii++){ sheet2.getRange(row,ii).setValue(Values[i-1][ii-1]); } }else{ row--; } row++;   }  }

 

 

それに伴ってメール送信も少し変更

 

function mail2(){   var outputSheet1 = "本日開始&終了タスク";   var ss = SpreadsheetApp.openById(SpreadsheetApp.getActiveSpreadsheet().getId()); var sheet1 = ss.getSheetByName(outputSheet1); var today = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd");  // offset計算のため値を1減算 var ticketName = 2; var worker = 4;  var mailAdress = "hoge@gmail.com"; //送信先 var lastRow1 =sheet1.getLastRow();  var Values= sheet1.getDataRange().getValues();  var message="お疲れ様です。本日予定のタスクリストを配信します。\n\n";  if (lastRow1==0){ message+="本日の作業はありません。\n" }else{ for (var i=1 ; i <= lastRow1; i++){ if(Values[i-1][0] != ""){ message+=Values[i-1][0]+":"+" 作業者:"+Values[i-1][worker]+" チケット名:"+Values[i-1][ticketName]+"\n"; }else if(Values[i-1][2] == "本日開始タスク"){  message+="● 以下のリストは"+today+" 開始タスクです。\n"; message+="------------------------------------------------\n"; }else if(Values[i-1][2] == "本日終了タスク"){  message+="● 以下のリストは"+today+" 終了タスクです。\n"; message+="------------------------------------------------\n"; }else{  message+="\n"; } } i++; }  message+="------------------------------------------------\n"; message+="\n"; message+="Have a nice day!\n";  MailApp.sendEmail(mailAdress, "【" +today+ "】予定(開始&終了)タスク", message);  }

 

おすすめ