PythonでExcelが見違える!openpyxlのテーブル機能で構造化データを扱おう

openpyxl

はじめに:ただのデータ羅列から、「意味のあるデータ」へ

Pythonを使って大量のデータをExcelファイルに出力したとき、「ただ数字が並んでいるだけで、なんだか見にくいな…」と感じたことはありませんか? 手作業でフィルターを付けたり、一行おきに色を塗ったりするのは、せっかく自動化したのに少し残念ですよね。

そんな悩みを一発で解決するのが、Excelの**「テーブル」**機能です。そして、この強力な機能をPythonのopenpyxlライブラリで自動的に設定することができます。

この記事で、あなたのExcel出力が変わる

この記事を読めば、openpyxlを使って単なるデータの羅列を、**フィルターや並べ替えが自由自在な、スタイリッシュで見やすい「構造化データ」**へと変身させる方法がわかります。

  • openpyxlでのテーブル作成の基本
  • データ範囲の指定とテーブル名の設定方法
  • 豊富な組み込みスタイルで見た目を一瞬で整えるテクニック

ただ値をセルに書き込むだけのスクリプトから卒業し、誰にでも喜ばれる、実用的なExcelファイルを生成するスキルを身につけましょう。

なぜ「テーブル」にすると見違えるのか?

Excelのテーブル機能は、単なる見た目の問題ではありません。指定されたデータ範囲を一つのまとまりとしてExcelに認識させることで、以下のようなメリットが生まれます。

  • 操作性の向上: ヘッダーに自動でフィルターボタンが付き、並べ替えや絞り込みが容易になります。
  • 可読性の向上: 縞模様の行スタイルが自動で適用され、データの行を追いやすくなります。
  • メンテナンス性の向上: 新しいデータを追加した際に、書式や数式が自動で拡張されます。

この強力な機能をPythonで操ることで、あなたのデータ出力は次のレベルに進みます。


openpyxlでテーブルを作成する3つのステップ

テーブルの作成は驚くほど簡単です。必要なクラスをインポートし、オブジェクトを作成して、ワークシートに追加するだけです。

Step 1: 必要なクラスをインポートする

まず、テーブル作成の主役であるTableクラスと、スタイルを担当するTableStyleInfoクラスをインポートします。

from openpyxl.worksheet.table import Table, TableStyleInfo

Step 2: Tableオブジェクトを作成する

次に、Tableクラスからオブジェクトを生成します。最も重要な引数は、テーブルの名前となるdisplayNameと、データ範囲を示すrefです。

# 'SalesData'という名前で、A1からD20の範囲をテーブルとする
table = Table(displayName="SalesData", ref="A1:D20")
  • displayName: Excel上で表示されるテーブル名です。日本語も使えます。
  • ref: 必ずヘッダー行を含めたデータ全体の範囲を 'A1:D20' のように文字列で指定します。

Step 3: ワークシートにテーブルを追加する

最後に、作成したTableオブジェクトを、対象のワークシートオブジェクトのadd_table()メソッドで追加します。

# wsは対象のワークシートオブジェクト (e.g., ws = wb.active)
ws.add_table(table)

これだけで、あなたのデータはExcel上で正式な「テーブル」として認識されます。


【実践】Pythonコードでテーブルを自動設定する

理論がわかったところで、実際にデータを書き込み、テーブル化するまでの一連の流れを見ていきましょう。

サンプルデータの書き込み

まずは、テーブル化する元となるデータをExcelシートに書き出します。

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws.title = "StoreSales"

# ヘッダー行とデータ行を追加
sales_data = [
    ['店舗名', '商品カテゴリ', '売上', '販売日'],
    ['東京本店', '飲料', 78000, '2025-09-24'],
    ['大阪支店', '食品', 52000, '2025-09-24'],
    ['東京本店', '雑貨', 35000, '2025-09-24'],
    ['福岡支店', '飲料', 45000, '2025-09-24'],
]

for row in sales_data:
    ws.append(row)

この時点では、まだ単なる値が入力されただけの状態です。

テーブルの適用とスタイルの設定

次に、このデータ範囲にテーブルを適用し、見た目を整えます。

from openpyxl.worksheet.table import Table, TableStyleInfo

# ...(上記のデータ書き込み処理に続けて)...

# テーブルオブジェクトを作成
# displayNameは任意の名前に, refは実際のデータ範囲に合わせる
table = Table(displayName="店舗別売上", ref="A1:D5")

# 見た目を整えるためのスタイル情報を設定
# Excelの組み込みスタイル "TableStyleMedium2" を使用
# showRowStripes=Trueで行を縞模様にする
style = TableStyleInfo(name="TableStyleMedium2", 
                       showFirstColumn=False,
                       showLastColumn=False, 
                       showRowStripes=True, 
                       showColumnStripes=False)

# スタイルをテーブルオブジェクトに適用
table.tableStyleInfo = style

# ワークシートにテーブルを追加!
ws.add_table(table)

# 保存して結果を確認
wb.save("sales_report.xlsx")

このコードを実行して生成されたsales_report.xlsxを開いてみてください。データ範囲が美しいデザインのテーブルになり、ヘッダーで自由に並べ替えやフィルターができるようになっているはずです。


スタイルを使いこなして、さらに見やすく

TableStyleInfonameプロパティを変更するだけで、様々なデザインを試すことができます。

  • TableStyleLight[1-21]: 明るい配色
  • TableStyleMedium[1-28]: 標準的な配色
  • TableStyleDark[1-11]: 暗い配色

例えば、name="TableStyleDark9"と指定すれば、黒を基調としたシックなデザインのテーブルになります。レポートのテーマや好みに合わせて色々なスタイルを試してみてください。

また、showFirstColumn=Trueにすると先頭列の文字が太字になるなど、細かいオプションで見た目を調整することも可能です。

まとめ:openpyxl.Tableでデータに命を吹き込もう

今回は、openpyxlのテーブル機能を使って、Pythonが出力するExcelファイルを見違えるようにする方法を解説しました。

  • Tableオブジェクトでデータ範囲を構造化する
  • refでヘッダーを含む範囲を正確に指定する
  • TableStyleInfoでデザインを瞬時に適用する

これらのテクニックを使えば、あなたはもう「ただデータを吐き出すだけ」のプログラマではありません。受け取った人が直感的に内容を理解し、すぐさま分析作業に取り掛かれるような、価値あるExcelレポートを生成するデータハンドリングのプロです。

ぜひ、あなたの次のプロジェクトからopenpyxl.Tableを活用してみてください。

コメント

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