社内稟議や経費精算など、繰り返し利用する Excel 申請書は「部署・申請者名・申請日」を入力し直し、明細欄を空に戻す作業が毎回発生します。Python と openpyxl を使えば、この初期化作業を数秒で自動化できます。本稿では、テンプレートを一発で初期状態へ戻すスクリプトをご紹介いたします。
目次
サンプルファイル
ファイル名 | 用途 |
---|
application_form.xlsx | 入力前のテンプレート |
application_form_reset.xlsx | スクリプト実行後に上書き保存される初期化済みファイル |
スクリプト全体
from datetime import date
from openpyxl import load_workbook
# --- 1. ワークブック読み込み ---
wb_path = 'application_form.xlsx'
wb = load_workbook(wb_path)
ws = wb.active
# --- 2. 固定ヘッダー(部署・氏名・申請日)を設定 ---
ws['B3'].value = 'Sales Div. Section 2' # 部署セル
ws['B4'].value = 'Rintaro Mori' # 氏名セル
ws['B5'].value = date.today() # 申請日セル
# --- 3. 明細行をクリア ---
# 対象範囲:12 行目〜シート最終行、列 C〜H
for row in ws.iter_rows(min_row=12,
max_row=ws.max_row,
min_col=3,
max_col=8):
# 商品名・数量・金額を初期化
row[0].value = None # 商品名 (列 C)
row[2].value = None # 数量 (列 E)
row[3].value = None # 金額 (列 F)
# --- 4. ブック保存 ---
wb.save('application_form_reset.xlsx')
コード解説
ステップ | 説明 |
---|
1. ワークブック読み込み | load_workbook() でテンプレートを開きます。 |
2. 固定ヘッダーの更新 | 部署セル(B3)、氏名セル(B4)、日付セル(B5)のみ書き換えます。 |
3. 明細行のクリア | iter_rows() を使い、12 行目以降の必要列だけ None を代入して空セル化します。 |
4. ブック保存 | 誤上書きを防ぐため、別名で保存しています。 |
応用ポイント
要件 | 実装ヒント |
---|
明細列が増減する場合 | max_col を変数化し、設定ファイルから読み込む構成にすると柔軟です。 |
旧データをバックアップしたい | wb.save('backup_' + wb_path) で実行前にコピーを作成しておくと安全です。 |
日付を和暦で表示したい | ws['B5'].number_format = 'ggge年m月d日' を追加してください。 |
まとめ
- 部署・氏名・日付のセット と 明細行のクリア を一括実行することで、申請書テンプレートを数秒で初期状態へ戻せます。
iter_rows()
の範囲指定と None
代入だけでセル内容を削除できるため、複雑なループは不要です。
- 手作業に比べヒューマンエラーを大幅に削減でき、定型業務の効率化に直結します。