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