働き方改革が始まり、会社でも残業過多にならないようにチェックが始まりました。
15日時点での残業時間、月末時点残業時間予想を報告しなければならないことになっており、
難しくない作業ではあるが、意外とひと手間かかる作業なので、面倒に思っていました。
GoogleAppsScriptでなんとかできないか考えてみました。
#手作業での運用
- 人事担当から「15日時点での報告お願いします」メールが届く
- チーム内メンバから15日時点での作業時間を教えてもらう
- 作業時間から残業時間、月末時点での残業時間予想を算出する
- 「15日時点での報告お願いします」メールに対して残業時間、月末時点予想時間を入力し返信する
#入力シートの作成
各自のタイムカードから自動で取り込めれば楽なのですが、諸事情があり、無理と判断しました。
入力シートを用意してそこに入れてもらうようにしました。
ここでは関数の説明は割愛します。
コード.gs
function SearchMail() {
var mailbody = createDraft();
//Gmailで検索する条件を作成
var serchInfoMap = {};
serchInfoMap['subject'] = "15日時点での報告お願いします"; // 検索する件名
serchInfoMap['after'] = "2019/12/01"; // 検索する範囲(以降)
//検索条件で取得したスレッド単位のメッセージリスト(2次元配列で縦がスレッド、横がメッセージ)
var messageList = searchMessageList(serchInfoMap);
//スレッド単位にループ
for(var index in messageList){
//引用文形式に力技で変換する
var lastMail = messageList[index][messageList[index].length - 1];
var quteBody = generateQuoteMailBody(lastMail.getPlainBody(), lastMail.getDate(), lastMail.getFrom());
var createMailBody = mailbody;
//返信メールを下書きに作成
var replayMailDrfut = lastMail.createDraftReply(createMailBody);
var replayMailMessage = replayMailDrfut.getMessage();
replayMailMessage.getPlainBody(), mailArgs) ;
}
}
function createDraft() {
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var to = "hogehoge@test.com,mokemoke@test.com";
var cc = "hogehoge2@test.com";
var subject = "";
var body = "";
// 件名を編集
var range = sheet.getRange("A1");
subject = "Re: " + range.getValues()
// CCを編集
var mailArgs = {cc: cc}
// 内容を編集
var values = sheet.getRange('A4:D11').getValues();
body += 'hogehogeさん、mokemokeさん' + '\n\n';
body += 'お疲れさまです。' + '\n';
body += '〇〇です。' + '\n\n';
body += '=================' + '\n';
var range = sheet.getRange("D1");
body += range.getValues() + '\n\n';
body += '常駐先:〇〇システム(東京)' + '\n';
body += '部署名:開発部' + '\n\n';
body += '氏名:' + '\n';
for(var i = 0; i <= 7; i++) {
if (Math.round(values[i][3]) >= 45) {
body += values[i][0] ; //名前
body += ' ①' + Math.round(values[i][2]) ; //①15日時点残業時間
body += ' ②' + Math.round(values[i][3]) + '\n'; //②予想残業時間
} else {
body += values[i][0] + ' ①②問題なし' + '\n' ; //問題なし
}
}
body += '\n' + '=================' + '\n\n';
body += '以上、よろしくお願いします。' + '\n';
GmailApp.createDraft(to, subject, body,mailArgs);
// 直接送付
//MailApp.sendEmail(to, subject, body,mailArgs);
return(body);
}
#説明
- まず「createDraft()」を実行しスプレッドシートからメール内容を作り上げます。
- メールの内容を作成後に、件名と以降を検索するために条件を指定します。
- "searchMessageList"を使ってメールリストを取得します。
- 取得したメールに対して返信指定で1.で作成したメール内容を挿入して、返信メールを作り上げます。
- 下書きボックスに格納して完了です。