LoginSignup
3
2

More than 3 years have passed since last update.

研究室の書籍貸出簿をJavascriptとGoogle Apps Scriptと書誌情報APIで.その2

Last updated at Posted at 2019-11-17

更新(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

myFuntion
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日おきとなる.
image.png

ぶじに受信

ぶじに1分おきにメールがくることを確認!
image.png

残された課題

これで,あと残ったのは返却用のインタフェースの作成.

3
2
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
3
2