スプレッドシート+メール通知

今回したいこと

スプレッドシートで管理しているソフト等の更新日が近くなったらメールを送りたい。
更新日が迫っているものの一覧が欲しいだけ。

早速作る

まずはスプレッドシートを作成して良いように設定。

すぷれっどしーと

以下コードを作ったスプレッドシートのGASにぶっこむ。

//メイン処理
function Main() {
  var wkData = getValue();
  var message = "";
  for(key in wkData){
    message += key + ":" + wkData[key] + "\n";
  }
  
  if(message != ""){
    sendMail(message);
  }
}

//ID列をキーにして連想配列に格納する
function getValue() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('シート1');
  var endRow = getLastRowNumber(sheet);
  var values = sheet.getRange(2,1,endRow-1,5).getValues();
  var data = {};
  for (var i = 0, l = values.length; i < l; i++) {
    var key = values[i].shift();
    if (key.length > 0) {
      if (isDateConvertCheck(values[i][1])){
        var today = new Date();
        var yesterday = new Date(today.getTime() - 24 * 60 * 60 * 1000);
        var nowDate = Utilities.formatDate(yesterday,'JST','yyyyMMdd');
        var wkDate = Utilities.formatDate(values[i][1],'JST', 'yyyyMMdd');
        
        if (wkDate > nowDate){
          continue;
        }
        
        var rtDate = Utilities.formatDate(values[i][2],'JST', 'yyyy年M月d日');
        values[i].splice(1,4);
        values[i][1] = "プロダクト期限:" + rtDate;
      }
      data[key] = values[i];
    }
  }
  return data;
}

//メールの送信
function sendMail(message) {
  GmailApp.sendEmail("メールアドレス(カンマ区切りで複数宛先)","プロダクト更新時期通知",message);
}

//変換出来るかチェック
function isDateConvertCheck(date){
  try{
    var cvDate = Utilities.formatDate(date, 'JST', 'yyyy年M月d日');
    return true;
  } catch(e){
    return false;
  }
}

//入力されている最終行の取得
function getLastRowNumber(sheet){
 var last_row = sheet.getLastRow();

 for(var i = last_row; i >= 1; i--){
  if(sheet.getRange(i, 2).getValue() != ''){
   return i;
    }
 }
}

後はトリガー設定して定期実行させるだけ。
ね?簡単でしょう?

受信したメールはこんな感じ。

mail

Fromがスクリプトを動かすユーザのメールアドレスになるので、個人や社内利用向けかなぁ。

SNSでもご購読できます。

コメントを残す


CAPTCHA