今回したいこと
スプレッドシートで管理しているソフト等の更新日が近くなったらメールを送りたい。
更新日が迫っているものの一覧が欲しいだけ。
早速作る
まずはスプレッドシートを作成して良いように設定。
以下コードを作ったスプレッドシートの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; } } }
後はトリガー設定して定期実行させるだけ。
ね?簡単でしょう?
受信したメールはこんな感じ。
Fromがスクリプトを動かすユーザのメールアドレスになるので、個人や社内利用向けかなぁ。