Pythonでエクセル勤怠管理表の日付と曜日を自動入力

Pythonで仕事自動化:第4回の課題

20日締めの勤怠管理表のエクセルファイルを瞬間作成する。面倒な日付と曜日の入力をPythonで自動化。

python automation 4th practice

今回は20日締めの勤怠管理表の日付と曜日の部分を瞬間で入力します。20日締めだと月をまたぐので、手動だと意外と面倒です。それを毎月行うのはとても無駄です。このようなルーチンワークはPythonで自動化しましょう。

勤怠管理表はエクセル(*.xlsx)でひな形ファイルがあるものとし、Pythonで日付と曜日を入力して別名で保存します。

勤怠管理表.xlsx(ひな形) >> 201703_勤怠管理表.xlsx(別名で保存)

今回は日付と曜日を入力するだけですが、応用すれば社員名簿ファイルを用いて社員名や社員番号を自動入力し、当月の1000人分の勤怠管理表を瞬間作成することもできます。

この記事の目次

準備

以下の記事を参考にWindowsにPythonをインストールしてください。

PythonをWindowsにインストールしてプログラミング学習を始める(ガンマソフト株式会社)
http://gammasoft.jp/blog/python-install-on-windows-for-learning-programming/

まず実行してみましょう

1. メニューからPythonのIDLEを開きます。

python idle select from menu

2. エディタを開いて、コードを貼り付ける

ツールバーのメニューから File > New File を選択すると新しいウィンドウが開きます。そこに、以下のプログラムコードをコピーして貼り付けてください。

import sys, os, datetime, openpyxl

YOUBI = ['月','火','水','木','金','土','日']

input_date = input('作成する年月度を入力してください(例:201608):')
try:
    # 当月の初日
    month_first = datetime.datetime.strptime(input_date, '%Y%m')
except ValueError:
    input('年月を201608のように入力してください。')
    sys.exit()

# 前月の末日
month_last = month_first - datetime.timedelta(days = 1)

# 勤怠管理の開始日と終了日(20日締め)
date_start = month_last.replace(day = 21)
date_end = month_first.replace(day = 20)

# エクセルブックファイル(ひな形)
file_template = '勤怠管理表.xlsx'
book = openpyxl.load_workbook(file_template)

# エクセルシート
sheet = book.get_sheet_by_name('Sheet1')

# 年月度の入力
sheet.cell(row = 1, column = 1).value = month_first.year
sheet.cell(row = 1, column = 3).value = month_first.month

# 月日曜日の入力
for rowNum in range(13, 44):
    if date_start <= date_end:
        # 月
        sheet.cell(row = rowNum, column = 1).value = date_start.month
        # 日
        sheet.cell(row = rowNum, column = 2).value = date_start.day
        # 曜日
        sheet.cell(row = rowNum, column = 3).value = YOUBI[date_start.weekday()]
    date_start += datetime.timedelta(days = 1)
    
# 新規ブックファイル保存
file_new = month_first.strftime('%Y%m') + '_' + file_template
book.save(file_new)

3. コードの保存

ドキュメントフォルダ(Documents)に「programpy」フォルダを作成し、さらにその下に「automation_04」を作成しておきます(好きな名前でも大丈夫です)。ツールバーのメニューから File > Save を選択して、「make_work_time_sheet.py」という名前で、作成したフォルダに保存します。

4. ひな形の勤怠管理表ファイルの準備

簡単なサンプルを用意しましたので、ダウンロードして先ほど作成した「automation_04」フォルダにコピーします

勤怠管理表のひな形(勤怠管理表.xlsx)のダウンロード

ファイルの中身は、以下のようなエクセルファイルなっています。

kintai sheet template

このファイルを開くとわかりますが、外部プログラムから操作するエクセルファイルには、セルの結合を使用しないでください。セルの位置を誤る原因になります。

5. プログラムの実行

以下のようにツールバーのメニューから Run > Run Module を選択するとプログラムが実行します。

python idle select from menu

すると以下のようにコマンドプロンプトが開くので、勤怠管理表を作成したい年月度を入力し、エンターキーを押します。

kintai cmd input

6. 結果の確認

以下のような別名のエクセルファイル(この例では、201703_勤怠管理表.xlsx)が出来上がります。日付と曜日が正しく入力されているのが確認できます。

kintai cmd input

ダブルクリックして実行してみる

Pythonはexeファイルを作らなくても、*.pyファイルをダブルクリックすれば、そのまま実行できます。これが、非常に便利なところです。

「make_work_time_sheet.py」と「勤怠管理表.xlsx」を適当なフォルダにコピーしてください。

「make_work_time_sheet.py」を、ダブルクリックし、起動したコマンドプロンプトに作成したい年月度(201703など)を入力すれば日付と曜日の入った勤怠管理表が作成されます。

カスタマイズ例

今回のコードをベースに以下のようなカスタマイズが考えられます。

ケース1:月末締めにする。
ケース2:要出勤日数をコマンドプロンプトで指定できるようにする。
ケース3:社員名簿ファイルを読み取り、社員分の勤怠管理表ファイルを作成する。

ここで、社員No.、所属、氏名の欄に自動入力されるようにする。

ケース4:会社の休業日ファイル(祝日を含む)を作成し、土日以外の休日にも対応させる。

ここで、要出勤日数は計算し自動入力されるようにする。

ケース5:曜日の色を、土曜日は青、日曜日と祝日は赤にする。