LoginSignup
1
0

More than 3 years have passed since last update.

残業報告を手軽にしたい

Last updated at Posted at 2020-03-12

働き方改革が始まり、会社でも残業過多にならないようにチェックが始まりました。
15日時点での残業時間、月末時点残業時間予想を報告しなければならないことになっており、
難しくない作業ではあるが、意外とひと手間かかる作業なので、面倒に思っていました。
GoogleAppsScriptでなんとかできないか考えてみました。

手作業での運用

  1. 人事担当から「15日時点での報告お願いします」メールが届く
  2. チーム内メンバから15日時点での作業時間を教えてもらう
  3. 作業時間から残業時間、月末時点での残業時間予想を算出する
  4. 「15日時点での報告お願いします」メールに対して残業時間、月末時点予想時間を入力し返信する

入力シートの作成

各自のタイムカードから自動で取り込めれば楽なのですが、諸事情があり、無理と判断しました。
入力シートを用意してそこに入れてもらうようにしました。
スプレッドシート.PNG
ここでは関数の説明は割愛します。

コード.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);

}

説明

  1. まず「createDraft()」を実行しスプレッドシートからメール内容を作り上げます。
  2. メールの内容を作成後に、件名と以降を検索するために条件を指定します。
  3. "searchMessageList"を使ってメールリストを取得します。
  4. 取得したメールに対して返信指定で1.で作成したメール内容を挿入して、返信メールを作り上げます。
  5. 下書きボックスに格納して完了です。

結果

こんな感じで出来上がりました。
キャプチャ.PNG

1
0
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
1
0