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


