GoogleAppsScript(GAS)

《GAS》期日メール送信(営業日のみ)ソース

Googleスプレッドシートから情報を取得し、設定されている期限と今日の日付を比較。

Googleカレンダーで実行日付が営業日の場合はメール送信する。

function setTrigger(){
  var setDate = new Date(); //今日の日付
  var setTime = new Date(); //実行日付
  setTime.setHours(08); //実行時
  setTime.setMinutes(00); //実行分
 
//テスト用変数start
//  var testDate = new Date('2019/11/5');
//  var testTime = new Date('2019/11/4');
//  testTime.setHours(10); //実行時
//  testTime.setMinutes(20); //実行分
//テスト用変数end
 
  /* 土日祝祭日でなければ実行トリガー(mailsend)をセット */
  if (isBusinessDay(setDate)){ 
  ScriptApp.newTrigger('mailsend').timeBased().at(setTime).create(); //
//テスト処理start
//  if (isBusinessDay(testDate)){
//   ScriptApp.newTrigger('mailsend').timeBased().at(testTime).create(); //
//テスト処理end
  }
}
function isBusinessDay(date){
  /* 土日祝祭日の場合はfalse、平日の場合はtrueを返す */
  //土日の場合はfalse
  if (date.getDay() == 0 || date.getDay() == 6) {
    return false;
  }
  //Googleカレンダーの情報を取得
  var calJa = CalendarApp.getCalendarById('ja.japanese#holiday@group.v.calendar.google.com');
  //祝日の場合はfalse
  if(calJa.getEventsForDay(date).length > 0){
    return false;
  }
  //それ以外の場合はtrue
  return true;
}
function delTrigger() {
  /* 使用済みの実行トリガー削除 */
  var triggers = ScriptApp.getProjectTriggers();
  for(var i=0; i < triggers.length; i++) {
    if (triggers[i].getHandlerFunction() == "mailsend") {
      ScriptApp.deleteTrigger(triggers[i]);
    }
  }
}   
 
function mailsend() {
    var mySs = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得 
    var Sheet = mySs.getSheetByName('【シート名】'); // 【シート名】を取得
    var mySheet = SpreadsheetApp.getActiveSheet(); //シートを取得
    var today = new Date(); //今日の日付を取得
    var strFrom = "【送信者メールアドレス】"; //From
    var strbcc  = "【BCCメールアドレス】"; //BCC
    var strname = "【差出人名】"; //差出人名
    var lastRow = mySs.getLastRow(); //最終行の取得
    var lastColumn = mySs.getLastColumn(); //最終列の取得
    var datas = Sheet.getRange(3,1,lastRow,lastColumn).getValues();//3行目/A列から最終行/最終列のデータをdatasへ格納
 
//ある程度落ち着いたら実行する start
  /* 使用済みの実行トリガーを削除する処理(delTrigger)実行 */
//  delTrigger();
//ある程度落ち着いたら実行する end 
 
  /* 繰り返し計算 */
  for (var i = 2; i <= lastRow-1; i++) { //最終行まで繰り返す(3行目を0と起算し5行目を参照)
        var task_status = datas[i][1];//タスクのステータス(A列を0と起算しB列を参照)
        var task_end_date = datas[i][2]; //タスクの期限を取得(A列を0と起算しC列を参照)
        var mailsend_day = datas[i][3];//メール配信設定の取得(A列を0と起算しD列を参照)
        var task_title = datas[i][4]; //タスク名を取得(A列を0と起算しE列を参照)
        var task_end_date1 = Utilities.formatDate(new Date(task_end_date), "Asia/Tokyo", "yyyy年MM月dd日"); //タスクの期限の表示形式を変換
        var dateDi = new Date(task_end_date); //タスク期限のDateを生成
        var dt = dateDi.getTime() - today.getTime(); //dateDiから今日の日付を引く
        var day = Math.ceil(dt / 1000 / 60 / 60 / 24);  //日付に変換
        if (task_status == "完了") /* task_status列が完了なら何もしない */;
        else if (task_title == "") { //タスク名が空の場合
          break;                      //処理を抜ける
        } else if (0 < day  && day <= mailsend_day) { //mailsend_dayの数値とタスク期限を比較
            for (var s = 6; s <= lastColumn; s++) { //G列目から最終列まで繰り返す(A列目を0と起算し7列目のG列を参照)
              var check = datas[i][s]; //チェックボックスの状態を取得
              if (check === false) { //チェックボックスの状態がFALSE(チェックがついていない)場合
                var user_name2 = datas[0][s]; //名前取得(3行目を0と起算)
                var mail2 = datas[1][s]; //メールアドレス取得(3行目を0と起算)
               /* メール本文を準備 */
                var strSubject2 = "【タスク管理】" + task_title + "の期限が迫っています!";
                var strBody2 = user_name2 + " 様\n" + "日々の業務お疲れ様です。\n" + "下記のタスクにつきましてフォローをお願いいたします。\n\n" + "タスク名:" + task_title + "\n"
                + "期  日:" + task_end_date1 + "\n" + "残  り:" + day + "日\n\n"
                + "下記URLより進捗フォローをお願いいたします。\n" + "スプレッドシートのURL";
                /* メールを送信 */
                var send = GmailApp.sendEmail(
                    mail2,
                    strSubject2,
                    strBody2, {
                        //bcc: strbcc,
                       from: strFrom,
                       name: strname
                    }           
                  );
                }
              }
        } else if (day <= 0) { //今日の日付と締切日を比較
             for (var t = 6; t <= lastColumn; t++) { //G列目から最終列まで繰り返す(A列目を0と起算する)
               var check = datas[i][t]; //チェックボックスの状態を取得
               if (check === false) { //チェックボックスの状態がFALSE(チェックがついていない)場合
                var user_name1 = datas[0][t]; //名前取得(3行目が0と起算)
                var mail1 = datas[1][t]; //メールアドレス取得(3行目が0と起算)
                 /* メール本文を準備 */
                 var strSubject1 =  "【タスク管理】" + task_title + "の期限が過ぎています!";
                 var strBody1 = user_name1 + " 様\n" + "日々の業務お疲れ様です。\n" + "下記のタスクにつきましてフォローをお願いいたします。\n\n" + "タスク名:" + task_title +  "\n"
                 + "期  日:" + task_end_date1 + " " + (-day)+ "日経過\n\n"
                 + "下記URLより進捗フォローをお願いいたします。\n" + "スプレッドシートのURL";
                 /* メールを送信 */
                 var send = GmailApp.sendEmail(
                     mail1,
                     strSubject1,
                     strBody1, {
                        //bcc: strbcc,
                        from: strFrom,
                        name: strname
                     }
                 );
                }
             }
         }
   }
}

-GoogleAppsScript(GAS)

Copyright© フリーランスSEノート , 2021 All Rights Reserved.