👩‍🏫

#55 GAS スプレッドシートのタスクの締め切りをメールで通知させてみた

2024/09/18に公開

はじめに

スプレッドシートでタスクを管理しつつ締め切りを通知することができたら便利だと思い、締め切り前にメールで通知するようGASを用いて設定してみることにしました。

手順

スプレッドシートにタスクを入力する

スプレッドシートにタスクを入力します。
タスクは追加したいときに追加していってください。

タスク:B3~
締め切り:C3~
状態:D3~

上記の場所のセルに入力します。

Google Apps Scriptの設定

スプレッドシートのメニューバーから「拡張機能」>「Apps Script」を開き、コード.gsを以下に書き換えます。

function sendEmail() {
  // アクティブなスプレッドシートのシートを取得
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // B列からD列までのデータを取得
  var data = sheet.getRange('B3:D' + sheet.getLastRow()).getValues();

  // 現在の日付を取得
  var today = new Date();

  // 行ごとにループ
  data.forEach(function(row) {
    // タスク
    var task = row[0];

    // 締め切り
    var dueDate = new Date(row[1]);

    // 状態
    var status = row[2];

    // 締め切りから2日前の日付
    var beforeDate = new Date(dueDate.getTime());
    beforeDate.setDate(dueDate.getDate() - 2);

    // 現在が締め切りの2日前より未来かつ締め切り未満、かつ状態が「未完了」の場合
    if (today.getTime() >= beforeDate.getTime() && today.getTime() < dueDate.getTime() && status !== '完了') {
      // ユーザーのメールアドレスを取得
      var emailAddress = Session.getActiveUser().getEmail();
      // メールの題名
      var subject = 'タスクの通知';
      // メールの本文
      var message = 'タスク:' + task + '\n締め切り: ' + Utilities.formatDate(dueDate, 'Asia/Tokyo', 'yyyy/MM/dd');
      // メールを送信
      MailApp.sendEmail(emailAddress, subject, message);
    }
  });
}

実行してみる

画面上部の「実行」を押下します。

すると、アクセス権限を求めるポップアップが表示されます。

先に進み「許可」押下でアクセス権限を許可してください。

実行が行われると自分のGmailアドレス宛にメールが届きます。
締め切りが2日前となったタスクの通知が確認できます。

トリガーの設定

実行ボタンを押さなくとも、毎日自動で実行されるようにトリガーを設定します
画面左のメニューから「トリガー」を押下しトリガー画面を開きます。
トリガー画面の右下の「+ トリガーを追加」ボタンを押下し、以下のように設定します。

実行する関数:sendEmail
実行するデプロイ:Head
イベントのソース:時間主導型
イベントの種類:日付ベースのタイマー
時間の間隔を選択(分):お好みで
エラー通知設定:お好みで

保存すると設定した時間間隔で自動的にメールが送られるようになります。
時間ベースのトリガーのタイプを変更することで各週や各月で通知を送ることも可能です。

最後に

今回はスプレッドシートに登録したタスクをメールで通知させてみました。
アクティブなシートを指定しているためシートが複数あると対応できないなど改善できるところがあるので、修正していけたらと思います。
閲覧ありがとうございました。

出典:
https://coporilife.com/486/
https://note.com/yasushiiizuka/n/n0412668779ac
https://monoblog.jp/archives/6920

Discussion