GAS Document.getBodyで勤怠管理を効率化!残業時間集計を自動化する

GAS Document.getBodyで勤怠管理を効率化!残業時間集計を自動化する

勤怠管理は、企業にとって重要な業務ですが、手作業で行うには時間と労力がかかります。特に、残業時間の集計は、従業員の労働時間を正確に把握し、適切な給与を支払うために不可欠です。しかし、手作業での集計はミスが発生しやすく、担当者の負担も大きくなります。

そこで、Google Apps Script(GAS)のDocument.getBodyを活用することで、勤怠管理、特に残業時間の集計を自動化し、業務効率を大幅に向上させることができます。この記事では、Document.getBodyの基本的な使い方から、勤怠管理システムへの応用、よくある問題とその解決策、さらにはカスタマイズ方法までを詳しく解説します。

Document.getBodyとは?GASの基本を理解する

Document.getBodyは、Googleドキュメントの本文全体を取得するためのGASのメソッドです。このメソッドを使うことで、ドキュメント内のテキスト、表、画像など、すべてのコンテンツにアクセスできます。勤怠管理においては、従業員が入力した勤務時間や休憩時間などの情報をドキュメントから読み取り、集計処理を行うために活用できます。

構文:

Document.getBody()

戻り値:

Bodyオブジェクト(ドキュメントの本文)

このBodyオブジェクトに対して、様々なメソッドを使用して、コンテンツの取得や操作を行うことができます。

勤怠管理システムへの応用:GASで残業時間集計を自動化する

ここでは、Document.getBodyを勤怠管理システムにどのように応用できるのか、具体的なコード例を交えながら解説します。

1. 勤怠データ入力用ドキュメントの作成

まず、従業員が勤務時間や休憩時間などを入力するためのGoogleドキュメントを作成します。ドキュメントの形式は、表形式やテキスト形式など、自由に選択できます。重要なのは、GASでデータを読み取りやすいように、一定のルールに基づいて入力することです。

2. GASによるデータ抽出と集計

次に、GASを使ってドキュメントからデータを抽出し、残業時間を集計するスクリプトを作成します。以下のコードは、ドキュメント内の表から勤務時間と休憩時間を読み取り、残業時間を計算する例です。

function calculateOvertime() {
// ドキュメントを取得
const doc = DocumentApp.getActiveDocument();
const body = doc.getBody();

// 表を取得(最初の表を例とする)
const table = body.getTables()[0];

// データの行数
const numRows = table.getNumRows();

let totalOvertime = 0;

// 2行目からデータを読み込む(1行目はヘッダーとする)
for (let i = 1; i < numRows; i++) {
// 各セルの値を取得
const startTime = table.getRow(i).getCell(0).getText(); // 出勤時間
const endTime = table.getRow(i).getCell(1).getText(); // 退勤時間
const breakTime = table.getRow(i).getCell(2).getText(); // 休憩時間

// 時間をDateオブジェクトに変換
const startDate = new Date("2024/01/01 " + startTime); // 年月日は仮の値
const endDate = new Date("2024/01/01 " + endTime); // 年月日は仮の値
const breakDate = new Date("2024/01/01 " + breakTime); // 年月日は仮の値

// 勤務時間(分)を計算
const workTimeMinutes = (endDate.getTime() - startDate.getTime()) / (1000 * 60);

// 休憩時間(分)を計算
const breakTimeMinutes = (breakDate.getTime() - new Date("2024/01/01 00:00:00").getTime()) / (1000 * 60);

// 実労働時間(分)を計算
const actualWorkTimeMinutes = workTimeMinutes - breakTimeMinutes;

// 残業時間(分)を計算 (8時間 = 480分を超える場合)
const overtimeMinutes = Math.max(0, actualWorkTimeMinutes - 480);

// 残業時間(時間)に変換
const overtimeHours = overtimeMinutes / 60;

// 合計残業時間に加算
totalOvertime += overtimeHours;
}

// 結果をログに出力
Logger.log("合計残業時間: " + totalOvertime + "時間");
}

コードの解説:

  • DocumentApp.getActiveDocument()でアクティブなドキュメントを取得します。
  • doc.getBody()でドキュメントの本文を取得します。
  • body.getTables()[0]で最初の表を取得します。(必要に応じて表のインデックスを変更してください)
  • table.getNumRows()で行数を取得し、ループで各行のデータを読み込みます。
  • table.getRow(i).getCell(0).getText()などで各セルのテキストを取得します。
  • 取得したテキストをDateオブジェクトに変換し、時間の計算を行います。
  • 残業時間を計算し、合計残業時間を算出します。
  • 最後に、Logger.log()で結果をログに出力します。

3. スプレッドシートへの出力

集計した残業時間をスプレッドシートに出力することで、データの管理や分析が容易になります。以下のコードは、集計結果をスプレッドシートに書き込む例です。

function outputToSpreadsheet(totalOvertime) {
// スプレッドシートを取得
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();

// 最終行を取得
const lastRow = sheet.getLastRow();

// 書き込むデータ
const outputData = [new Date(), totalOvertime]; // 日付と残業時間

// スプレッドシートに書き込み
sheet.getRange(lastRow + 1, 1, 1, 2).setValues([outputData]);

Logger.log("スプレッドシートへの書き込みが完了しました。");
}

コードの解説:

  • SpreadsheetApp.getActiveSpreadsheet()でアクティブなスプレッドシートを取得します。
  • ss.getActiveSheet()でアクティブなシートを取得します。
  • sheet.getLastRow()で最終行を取得し、その次の行にデータを書き込みます。
  • sheet.getRange(lastRow + 1, 1, 1, 2).setValues([outputData])でデータを書き込みます。

よくある問題とトラブルシューティング

1. 時間の計算がうまくいかない

時間の計算がうまくいかない場合、以下の点を確認してください。

  • 入力された時間の形式が正しいか(例:HH:MM
  • Dateオブジェクトへの変換が正しく行われているか
  • タイムゾーンの設定が適切か

Dateオブジェクトはタイムゾーンの影響を受けるため、必要に応じてタイムゾーンを明示的に指定してください。

2. 表の取得がうまくいかない

body.getTables()で表を取得できない場合、以下の点を確認してください。

  • ドキュメント内に表が存在するか
  • 表のインデックスが正しいか(body.getTables()[0]は最初の表を指します)

複数の表が存在する場合は、ループ処理でそれぞれの表を処理する必要があります。

カスタマイズ方法と応用例

1. 祝日を考慮した残業時間計算

祝日を考慮して残業時間を計算するには、祝日リストを別途用意し、勤務日かどうかを判定する必要があります。スプレッドシートに祝日リストを作成し、GASで読み込むことで実現できます。

2. 部署ごとの集計

部署ごとに残業時間を集計するには、ドキュメントに入力された部署情報を読み取り、部署ごとに集計処理を行う必要があります。switch文やif文を使って、部署ごとに処理を分岐させることができます。

3. Slackへの通知

残業時間が一定時間を超えた場合に、Slackに通知を送ることも可能です。Slack APIを利用して、GASからSlackにメッセージを送信できます。

まとめ

Document.getBodyを活用することで、Googleドキュメントに入力された勤怠データを効率的に集計し、残業時間の計算を自動化することができます。この記事で紹介したコード例を参考に、自社の勤怠管理システムに合わせたカスタマイズを行い、業務効率の向上を目指してください。

PR

未経験からSNSデザインを学び、在宅ワークで収入を得たい方へ。
Flap DESIGNは、デザインスキルから案件獲得までを徹底サポートするオンラインスクールです。現役プロがマンツーマンで指導するため、挫折しにくい環境が強み。
さらに、受講期間中に案件を獲得できなかった場合は、売上が立つまで営業サポート期間を延長する「売上保証制度」も魅力です。
副業として月8〜20万円を目指したい会社員の方、出産・育児を機に新しい働き方を求める方、フリーランスとして独立を目指す方など、ライフスタイルに合わせた働き方を実現したい方にぴったりのサービスです。まずは無料相談で詳細を聞いてみませんか?

未経験から始める!SNSデザインスクール