別名保存は「元ファイルを壊さず、安全に新しいExcelを作る」ための超重要テクニック
Excel業務自動化では、別名保存(Save As) が非常に重要です。
なぜなら、次のような実務ニーズがあるからです。
- テンプレートを読み込んで、加工して、別名で保存したい
- 元データを上書きしたくない
- 日付入りのレポートを自動生成したい
- バッチ処理で大量のファイルを安全に保存したい
Python(openpyxl)では、save() に別のファイル名を渡すだけで別名保存ができます。
初心者でも理解しやすいように、基本から実務テンプレートまで丁寧に解説します。
基本:別名で保存する(最もシンプル)
sample.xlsx → sample_output.xlsx として保存
from openpyxl import load_workbook
wb = load_workbook("sample.xlsx")
ws = wb["Sheet1"]
ws["A1"].value = "処理完了"
wb.save("sample_output.xlsx")
Python深掘りポイント
save("新しいファイル名")とするだけで別名保存- 元ファイル(sample.xlsx)は変更されない
- テンプレート運用の基本パターン
元ファイルを壊さないための「テンプレート → 別名保存」パターン
template.xlsx を読み込み、report.xlsx として保存
wb = load_workbook("template.xlsx")
ws = wb.active
ws["B2"].value = "データ入力"
wb.save("report.xlsx")
Python深掘りポイント
- テンプレートを使う業務では 絶対に上書き保存しない
- 別名保存することでテンプレートが壊れない
- 毎日・毎週のレポート生成に最適
日付入りファイル名で保存する(実務で最も使う)
今日の日付をファイル名に入れる
from datetime import datetime
from openpyxl import load_workbook
wb = load_workbook("template.xlsx")
today = datetime.now().strftime("%Y%m%d")
filename = f"report_{today}.xlsx"
wb.save(filename)
Python深掘りポイント
- 日付入りファイルは「履歴管理」に最適
- 自動レポート生成でほぼ必ず使う
strftime("%Y%m%d")で「20260411」のような形式になる
保存先フォルダを自動作成して別名保存する(安全性UP)
output フォルダが無ければ作って保存
import os
from openpyxl import load_workbook
os.makedirs("output", exist_ok=True)
wb = load_workbook("sample.xlsx")
wb.save("output/sample_processed.xlsx")
Python深掘りポイント
- フォルダが無いと保存できずエラーになる
exist_ok=Trueでフォルダが既にあってもOK- 自動化スクリプトでは必須のテクニック
pathlib を使った別名保存(最も読みやすい書き方)
Pathオブジェクトで直感的に書ける
from pathlib import Path
from openpyxl import load_workbook
path = Path("output/report.xlsx")
wb = load_workbook("template.xlsx")
wb.save(path)
Python深掘りポイント
/でパス結合できるためコードが美しい- 大規模プロジェクトでよく使われる
- ファイル操作が直感的になる
上書き防止のための「存在チェック」付き別名保存
既に同名ファイルがある場合は保存しない
import os
from openpyxl import load_workbook
output = "report.xlsx"
if os.path.exists(output):
print("既にファイルが存在します。別名を指定してください。")
else:
wb = load_workbook("template.xlsx")
wb.save(output)
Python深掘りポイント
- 誤って上書きする事故を防げる
- 重要な帳票を扱う業務で役立つ
例題①:テンプレートから日付入りレポートを自動生成する
シナリオ
template.xlsx を読み込み、A1 に日付を書き込み、
report_20260411.xlsx のように保存する。
from openpyxl import load_workbook
from datetime import datetime
wb = load_workbook("template.xlsx")
ws = wb.active
ws["A1"].value = datetime.now().strftime("%Y-%m-%d")
filename = f"report_{datetime.now().strftime('%Y%m%d')}.xlsx"
wb.save(filename)
Python解説
- 日付入りレポートが自動生成される
- 毎日・毎週の定期レポートに最適
例題②:複数ファイルを読み込み、別名で一括保存する(バッチ処理)
from openpyxl import load_workbook
files = ["a.xlsx", "b.xlsx", "c.xlsx"]
for f in files:
wb = load_workbook(f)
ws = wb.active
ws["A1"].value = "処理済み"
new_name = f.replace(".xlsx", "_done.xlsx")
wb.save(new_name)
Python解説
- 大量ファイルの自動処理に最適
- 元ファイルを壊さず安全に保存できる
例題③:output フォルダに自動で保存するテンプレート
import os
from openpyxl import load_workbook
os.makedirs("output", exist_ok=True)
wb = load_workbook("data.xlsx")
ws = wb.active
ws["B2"].value = "OK"
wb.save("output/data_output.xlsx")
Python解説
- 保存先フォルダを自動生成
- 自動化スクリプトの基本構造
別名保存を業務で設計するときの視点
- 元ファイルを壊さないために「テンプレート → 別名保存」が基本
- 日付入りファイル名で履歴管理が簡単になる
- フォルダ自動作成で保存エラーを防げる
- pathlib を使うとコードが読みやすくなる
- バッチ処理では「元ファイル → _done.xlsx」などの命名が便利
