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); }