初心者向け|openpyxlのWorkbookPackageでExcelテンプレートを使いこなす方法

openpyxl

はじめに:Excelの「テンプレート」をPythonで自動化しませんか?

「毎月、同じフォーマットのExcel報告書を手作業で作っている…」 「計算式やグラフが設定済みのExcelファイルを使いまわしたい…」

もしあなたがPythonでExcel作業の自動化を始めたばかりなら、こんな風に思ったことはありませんか? openpyxlライブラリは非常に強力ですが、Excelの**テンプレートファイル(.xltx)**を扱うには、一つだけ知っておくべきコツがあります。

その鍵となるのが、今回のテーマであるWorkbookPackageです。

この記事では、openpyxl初心者のあなたでもWorkbookPackageをしっかり理解し、Excelテンプレートを自由自在に扱えるようになることをゴールに、丁寧に解説していきます。

そもそもopenpyxlのWorkbookPackageって何?

結論から言うと、WorkbookPackageは**「これから読み込むファイルは、特別な『テンプレート』ですよ!」**とopenpyxlに伝えるためのおまじない(設定)です。

通常の.xlsxファイルと、テンプレートの.xltxファイルは少しだけ内部の構造が異なります。この設定を有効にすることで、openpyxlがテンプレートの構造を正しく理解し、書式や設定を壊さずに読み込んでくれるようになります。

なぜWorkbookPackageが必要なの?

この設定がないと、openpyxlはテンプレートファイルをただのExcelファイルとして開こうとします。その結果、せっかく設定したテンプレートの書式が崩れたり、意図しない動作をしたりする可能性があるのです。

load_workbook関数でWorkbookPackage=Trueと指定するだけで、こうした問題を未然に防ぐことができます。

# load_workbookで読み込む際に、Trueと指定するだけ!
wb = load_workbook(filename='template.xltx', WorkbookPackage=True)

WorkbookPackageを使うと便利になること

  • 定型業務の完全自動化: 請求書や報告書など、フォーマットが決まっている書類をPythonだけで大量に生成できます。
  • 品質の担保: 人が手で入力しないので、計算式を間違えたり、書式を崩したりするミスがなくなります。
  • 時間の節約: 面倒なコピー&ペースト作業から解放され、もっと創造的な仕事に時間を使えるようになります。

実践!WorkbookPackageの使い方を3ステップでマスターしよう

理屈は分かったところで、さっそく手を動かして使い方をマスターしましょう!たった3つのステップで完了です。

Step 1: Excelでテンプレートファイル(.xltx)を準備する

まずは、Pythonで操作するための元となるテンプレートファイルを作成します。

  1. PCでExcelを開き、新しいシートを作成します。
  2. A1セルに「=TODAY()」と入力しておきましょう。これでファイルを開くたびに今日の日付が入ります。
  3. B1セルに「報告タイトル」、C1セルに「作成者」と入力し、セルの背景色を黄色にするなど、分かりやすい書式を設定します。
  4. 最後に、このファイルを保存します。「ファイル」>「名前を付けて保存」を選び、ファイルの種類を**「Excel テンプレート (*.xltx)」**に変更し、「report_template.xltx」という名前で保存してください。

これで下準備はOKです。

Step 2: Pythonでテンプレートを読み込む (ここが重要!)

次に、今作成したテンプレートファイルをPythonで読み込みます。ここでWorkbookPackage=Trueの登場です。

from openpyxl import load_workbook

# ファイル名を指定して、テンプレートを読み込む
# ここが今日のポイント! WorkbookPackage=True を忘れずに。
try:
    file_path = 'report_template.xltx'
    wb = load_workbook(filename=file_path, WorkbookPackage=True)
    ws = wb.active
    print(f"'{file_path}' の読み込みに成功しました!")

except FileNotFoundError:
    print(f"エラー: '{file_path}' が見つかりません。")

このコードを実行して「読み込みに成功しました!」と表示されれば、第二ステップはクリアです。

Step 3: データを入力して新しいファイルとして保存する

最後に、読み込んだテンプレートにPythonでデータを書き込み、新しいExcelファイル(.xlsx)として保存します。

from openpyxl import load_workbook
from datetime import datetime

# Step 2のコードに続けて書きます

# テンプレートにデータを書き込む
ws['B2'] = '2025年度 第2四半期 業績報告'
ws['C2'] = 'AI Gem'

# ファイル名を生成
# 例: 'output_20250920.xlsx' のようなファイル名にする
today_str = datetime.now().strftime('%Y%m%d')
output_filename = f'output_{today_str}.xlsx'

# 通常のExcelファイルとして保存
wb.save(output_filename)

print(f"'{output_filename}' が作成されました。")

このコードを実行すると、report_template.xltxと同じディレクトリに、データが入力された新しいExcelファイルが作成されているはずです。開いて確認してみてください。テンプレートの書式やA1セルの計算式がちゃんと引き継がれていることが分かりますね!

【少し応用】マクロ付きテンプレート(.xltm)も扱える?

はい、扱えます!

報告書に自動計算ボタンなどを配置した、マクロ付きのテンプレート(.xltm)を扱う場合も、基本は同じです。ただし、マクロ情報を保持するために、load_workbookにもう一つkeep_vba=Trueというおまじないを追加します。

# マクロ付きテンプレートを読み込む場合
wb = load_workbook(
    filename='macro_template.xltm', 
    keep_vba=True,            # マクロを保持する設定
    WorkbookPackage=True      # テンプレートとして読み込む設定
)

# ... データを入力 ...

# 保存する際は、マクロ有効ブック(.xlsm)として保存
wb.save('macro_output.xlsm') 

このように、2つの設定をTrueにすることで、マクロもテンプレート情報も両方引き継いだファイルを生成できます。

よくある疑問:save_as_templateとの違いは?

openpyxlを調べていると、wb.save(save_as_template=True)というコードを見かけることがあります。これはWorkbookPackageとどう違うのでしょうか?

答えはシンプルです。

  • WorkbookPackage=True: 読み込み時に使う。「テンプレートを読み込みます」という宣言。
  • save_as_template=True: 保存時に使う。「テンプレートとして保存します」という宣言。

役割が「読み込み」と「保存」で全く違うので、混同しないようにしましょう。

まとめ:WorkbookPackage=Trueを合言葉にExcel作業を効率化!

お疲れ様でした!今回はopenpyxlでExcelテンプレートを扱うためのWorkbookPackageについて、初心者向けに解説しました。

  • テンプレート(.xltx, .xltm)を読み込むときはload_workbookWorkbookPackage=Trueを指定する。
  • マクロも維持したい場合はkeep_vba=Trueも追加する。
  • たったこれだけで、定型的なExcel作業の自動化が劇的に楽になる!

この「WorkbookPackage=True」という合言葉を覚えておけば、あなたのPythonライフはさらに快適になるはずです。ぜひ、今日学んだことをあなたの業務改善に役立ててみてください。

コメント

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