Python 業務自動化 | Excel業務自動化:Excel基本操作 - 別名保存

Python Python
スポンサーリンク

別名保存は「元ファイルを壊さず、安全に新しい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」などの命名が便利

タイトルとURLをコピーしました