目的
GAS(Google Apps Script)を利用して、スプレットシートの特定の条件に一致したセルを含む行(今回だと日付情報をトリガーにして)の情報をGoogle Chatに通知させたい。
背景
スプレットシートでサーバやNW機器等(結構の量)の資産情報を管理しているのですが、資産の保守期限等期日管理を行う場合に手動かつ目視でいちいち確認するのが非常に面倒だという課題がありました。
というわけで、保守期限の日付を自動で判定して、期限の〇日前だった時に通知を飛ばすGASで作ろうと考えました。通知方法はいろいろありますが、今回はGoogleChatに飛ばします。
事前準備
検証用に下記の画像のようなスプレットシートを用意します。
シート名は「list」とします。
コード
function datecheck() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('list');
// アクティブシートの最終行を取得
var lastRow = sheet.getLastRow();
lastRow = lastRow + 1;
// チャットのWebhookのURL
var url = '*******************************************';
for (var i = 2; i < lastRow; ++i) {
// 最新日
var date = new Date();
// 〆切10日前(サンプルは最新日から10日後)
date.setDate(date.getDate() + 10);
var YYYYMMDD = Utilities.formatDate(date, 'JST', 'yyyy/MM/dd');
// E列の期限に表示された日付を取得
var dt = sheet.getRange(i, 5).getDisplayValue();
// 日付を比較して10日後の期限と一致した場合チャットに通知する条件式
if (YYYYMMDD === dt) {
// 期日の合致した拠点と資産名称を取得
var ktn = sheet.getRange(i, 1).getDisplayValue();
var nm = sheet.getRange(i, 2).getDisplayValue();
// チャットに通知
var text = "10日後に保証期限が切れる機器があります" + '\n' +
'拠点:' + ktn + '\n' +
'資産:' + nm + '\n' +
'期日:' + dt + '\n';
var payload = {
text: text
}
// エンコード
var json = JSON.stringify(payload);
// ポストするためにヘッダーとボディをまとめて入力
var options = {
method: 'POST',
contentType: 'application/json; charset=utf-8',
payload: json
}
// 送信を実行
var result = UrlFetchApp.fetch(url, options);
}
}
}
補足
Apps Script側でスクリプトの定期実行の時間設定を入れれば自動化の完成です。
コードの具体的な内容は基本コメントを見ていただければと思います(不明点在れば質問ください)。
仕組みはいたってシンプルです。
まず、このスクリプトを実行した日を取得して、その取得した日から〇日後(上記コードだと10日後)の日付とスプレットシートに記載されている日付(例だとE列)の値を比較します。
比較して一致していればその日付がある行に含まれているセル情報を通知で飛ばします。
参考情報
GAS part3 ハングアウトチャットの便利機能を使った業務改善
↑ GoogleChatで飛ばす際のコードの書き方で参考になりました。