#更新(2020年3月29日)
関数づくりの箇所で,GoogleAppsScriptのDate型では,単純にGetDate()したものに⁺15としても,「日」だけが更新されて,年と月はスクリプト実行年月日の年月が設定されてしまう(newDate()でオブジェクトを作った時の年月).つまり,本貸し出しが2019年11月25日でスクリプト実行日が2020年3月4日の場合,期待されるのはdeadlienに2019年12月10日が設定されることなのだが,「2020年3月」はKeepされて,25日がGetDateで設定された後,15日たされて,2020年4月10日となってしまう.ということで,年月も指定するように設定.
またオブジェクトを作ってから日付設定するのではなく,オブジェクトを作るときに設定してしまう形にした.
#関連記事
その1:本のバーコードを読んで貸出記録をつけるシステム
その2:返却期限すぎても返却されていない本のリマインドメールを出すシステム
その3:貸出簿をつける時のエラーチェック(スプレッドシートの学生情報DBに問い合わせするシステム)
その4 : 返却処理のシステム
前回の続きで,残された課題のうち,リマインドメール送信を作ってみた.
#構想
返却日をすぎてるのに返却処理がされてない本ついて,1日1回リマインドメールを出す.
具体的には,
- スプレッドシートを順に走査し,貸出日の日付を取得.
- 今日の日付と貸出日+15日の日付をチェックし,今日の日付の方が大きい場合に,メールを送る.
という関数を作り,その関数をGoogle Apps Scriptのトリガ機能を使って定期的(毎日)実行する.
#まずは関数づくり.
参考にしたページ
https://spreadsheets-dojo.com/isblank/
http://pineplanter.moo.jp/non-it-salaryman/2018/10/14/gas-getdate/
https://qiita.com/mistolteen/items/404c10657b1b27007a3c
function myFunction() {//データをレビューしてメールを送る.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("シート1");
var lastRow=sheet.getDataRange().getLastRow(); //対象となるシートの最終行を取得
for(var i=2; i<=lastRow ; i++){//あくまで1からスタートするみたい.で,1行目はヘッダー行なのでi=2とした
var lentdate_s=sheet.getRange(i, 1).getValue();
var lentdate = new Date(lentdate_s);
/******2020/3/29コメントアウト
var deadlinedate = new Date();
deadlinedate.setDate(lentdate.getDate()+15);
*********/
var deadlinedate = new Date(lentdate.getFullYear(), lentdate.getMonth(), lentdate.getDate()+15); //2020/3/29追記
var currentdate = new Date();
if(currentdate > deadlinedate){
var returndate = sheet.getRange(i, 7); //7列目は返却日を記録する箇所.
if(returndate.isBlank()){
//メアドを取得してリマインド送信する.
var mailadress = sheet.getRange(i,6).getValue();
var student = sheet.getRange(i, 4).getValue();
var book = sheet.getRange(i, 2).getValue();
var author=sheet.getRange(i, 3).getValue();
body = student + "さん\n\n"+"こんにちは,藤野です.\n"+
lentdate.getYear()+"年"+(lentdate.getMonth()+1)+"月"+lentdate.getDate()+"日" + "に借りていかれた\n\n"+
"「"+ book +"」\n(著者:"+ author+")\n\n" +
"について返却期日を過ぎていますが,まだ返却処理がされていません.\n"+
"忘れずに返却するようにしてください.また返却した際には返却処理を忘れずに.\n"+
"よろしくお願いいたします。\n\n藤野 拝";
MailApp.sendEmail(mailadress,'本の返却未了のお知らせ',body);
}
}
}
}
#トリガー処理
https://qiita.com/tanabee/items/2c51681396fe12b6a0e4#%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC
エディタの編集
->現在のプロジェクトのトリガー
を選択.
下記のようにmyFunctionを定期実行に設定.とりあえず動作確認のため,1分おきにしているが,これが1日おきとなる.
#残された課題
これで,あと残ったのは返却用のインタフェースの作成.