前提・実現したいこと
Googleスプレッドシートにて、下記のようなタスクリストがあり
ステータスを「新規依頼/進行中」にした場合関係者にメールで通知が来るGASを作成中です。
No | ステータス | 記入日 | タスク | 期限 |
---|---|---|---|---|
1 | 完了▼ | 6/1 | AAAA | 7/1 |
2 | 完了▼ | 6/2 | BBB | 7/2 |
3 | 新規依頼▼ | 6/3 | CCCCCCC | 7/3 |
4 | 進行中▼ | 6/4 | DDDDDDD | 7/4 |
5 | 6/5 | EEEEEE | 7/5 | |
6 | 6/6 | FFFFFFF | 7/6 | |
7 | 6/7 | GGGGGGG | 7/7 |
現時点で正常動作はしているのですが、複数タスクのステータスを一気に変更した場合
変更したタスク数分のメールが来てしまうので、その点を改良したいと思っています。
①時間をトリガーにし、変更があった場合だけ通知する。
②トリガーは変更せず、複数タスクが一気に更新されても1つのメールにまとめる。
上記どちらかの変更にしたいです。
力を貸していただきたく思います。
該当のソースコード
function onChangeStatus(e){ var cell = e.range; var status = e.value; var sheet = cell.getSheet(); var column = cell.getColumn(); var row = cell.getRow(); var lastRow = sheet.getLastRow(); if(column === 2 && row >= 2 && row <= lastRow && status === '新規依頼' || status === '進行中' ){ sendEmail(row); } } function sendEmail(row){ var FIELDS = { no: 0, task: 2, status: 4 } var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); var index = row - 1; var myNo = values[index][FIELDS.no]; var task = values[index][FIELDS.task]; var recipient = 'example1@example.com,example2@example.com,example3@example.com'; var recipientName = '皆様'; var subject = ''; subject += 'タスク完了メール: [' + myNo + '] '; subject += task; var body = ''; body += recipientName + '\n'; body += '以下のタスクが完了しました\n'; body += '[' + myNo + '] ' + task; GmailApp.sendEmail(recipient, subject, body); }
複数タスクのステータスを一気に変更した場合とは具体的にどのような操作を行ったときでしょうか?複数選択範囲を「Ctrl」+「D」でコピーした場合はeパラメータが範囲で受け取れると思うので、上記コードだとメールは1件しか飛ばないと思いますし、それ以外に一気に変更した場合に該当する操作が思いつかないので。