LoginSignup
10
8

More than 5 years have passed since last update.

GoogleAppsScriptを使って期限が近いタスクをメール通知した件

Last updated at Posted at 2018-06-08

やりたいこと

社員の資格管理をしているシートから、6ヵ月前/3ヵ月前/1ヵ月前にメール通知を自動がしたかった。
(それまでは担当の人が手動でメール書いてました。。。)

シートのフォーマット

元々使用していたフォーマットを使用。以下はテスト用シート。
bandicam 2018-06-08 20-15-44-352.jpg

コードを書く

メニューバーの[ツール]-[スクリプトエディタ]からスクリプト編集画面にいきコードを書く。

function mailSend() {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();                    //スプレッドシートを取得
    var sheet1 = spreadsheet.getSheets()[0];                                    //1枚目のシートを取得
    var today = new Date();                                                     //今日の日付取得
    var today_format = Utilities.formatDate(today, "JST", "yyyy/MM/dd");      //今日の日付整形

    /* 静的パラメータ */
    var strFrom = "********@gmail.com";
    var strCc = "";

    for (var i = 2; i <= 300; i++) {

        /* 動的パラメータ */
        var strName = sheet1.getRange(i, 1).getValue();                         //名前

        /* 名前が空の場合は戻る */
        if ( strName == "" ) {
            continue;
        }

        var strTo = sheet1.getRange(i, 2).getValue();                           //メールアドレス
        var strQualNo = sheet1.getRange(i, 3).getValue();                       //資格ナンバー
        var strQualName = sheet1.getRange(i, 4).getValue();                     //資格名
        var strLimit = sheet1.getRange(i, 6).getValue();                        //資格期限
        var strLimit_format = Utilities.formatDate(strLimit, "JST", "yyyy/MM/dd");  //資格期限
        var strSub = "[通知]" + strQualName + "有効期限について";                               //Subject

        var strBody = strName + "さん\n\nお疲れ様です。\n" +
                      "〇〇です。\n\n" +
                      "現在取得されている" + strQualName + "(" + strQualNo + ")" + "の\n" +
                      "有効期限が認定日から計算したところ" + strLimit_format + "で\n" +
                      "失効予定となっております。\n\n" +
                      "正確な有効期限情報は書くベンダの\n" +
                      "公式サイトにてご確認ください。\n\n" +
                      "資格試験の失効は資格手当の失効にもつながる可能性があります。\n" +
                      "現在更新に動いている方もいるとは思いますが、\n" +
                      "更新できるようであれば早めの更新をおすすめします。\n\n" +
                      "※更新方法\n" +
                      "・同資格の再合格\n" +
                      "・上位資格の1科目の合格\n\n" +
                      "以上よろしくお願いします。"; 

        var strLimit_30Date = new Date(strLimit.getYear(), strLimit.getMonth(), strLimit.getDate() - 30); //期限の30日前
        var strLimit_30Date_format = Utilities.formatDate(strLimit_30Date,"JST","yyyy/MM/dd");            //期限の30日前整形

        var strLimit_90Date = new Date(strLimit.getYear(), strLimit.getMonth(), strLimit.getDate() - 90); //期限の90日前
        var strLimit_90Date_format = Utilities.formatDate(strLimit_90Date,"JST","yyyy/MM/dd");            //期限の90日前整形

        var strLimit_180Date = new Date(strLimit.getYear(), strLimit.getMonth(), strLimit.getDate() - 180); //期限の180日前
        var strLimit_180Date_format = Utilities.formatDate(strLimit_180Date,"JST","yyyy/MM/dd");            //期限の180日前整形

        /* 今日の日付が期限の30/90/180日前だった場合、メールを送信 */
        if ( today_format == strLimit_30Date_format || today_format == strLimit_90Date_format || today_format == strLimit_180Date_format ) {
            var send = GmailApp.sendEmail(
                strTo,
                strSub,
                strBody, {
                    from: strFrom
                }
            );
        }
    }
}

cron設定をする

1. 時計のマークをクリック
bandicam 2018-06-08 20-32-44-548.jpg

2. 「トリガーが設定されていません。今すぐ~」をクリック
bandicam 2018-06-08 20-34-21-446.jpg

3. 以下みたいな感じで設定して「保存」をクリック
bandicam 2018-06-08 20-42-23-430.jpg

これで一日一回このスクリプトが実行され、ちょうど期限から30/90/180日前の人にメールが飛ぶようになる。

もっとかっこよく短い書き方あったら教えてください;;

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8