Pythonでデータを出力しただけのExcelファイル、ただ数字と文字が並んでいるだけで、少し見づらいと感じることはありませんか?「このデータで絞り込みができたら…」「行ごとに色が付いていれば見やすいのに…」と思ったことがあるなら、openpyxlのTable(テーブル)機能がその悩みを解決します。
この記事では、openpyxlを使って、見出しに自動でフィルターが付く高機能な「テーブル」を作成する方法を、初心者にも分かりやすく解説します。
このテクニックを使えば、あなたが出力するExcelファイルは、ただのデータシートから、誰にとっても見やすく、操作しやすい便利なレポートへと生まれ変わります。
はじめに:Excelの「テーブル」機能とは?
まず、Excelにおける「テーブル」とは、単なるセルの範囲とは一線を画すオブジェクトです。セル範囲を「テーブル」として書式設定すると、主に次のようなメリットが自動的に付与されます。
- 自動フィルター: 見出し行にフィルターと並べ替えのドロップダウンリストが自動で追加されます。
- 見やすいデザイン: 行ごとに背景色が変わる「縞模様」など、デザインテンプレートを簡単に適用できます。
- 簡単な操作: データの追加や集計が容易になります。
この強力な機能をopenpyxlで直接作成する方法を見ていきましょう。
openpyxlでフィルター付きテーブルを作成する
テーブルの作成は、シートにデータを書き込んだ後、その範囲をテーブルとして指定する、という2ステップで行います。
openpyxl.worksheet.table.Tableクラスをインポートし、worksheet.add_table()メソッドでシートに追加するのが基本的な流れです。
import openpyxl
from openpyxl.worksheet.table import Table, TableStyleInfo
# ワークブックとシートを準備
wb = openpyxl.Workbook()
ws = wb.active
# テーブル化したいデータをシートに書き込む
# 最初の行がヘッダー(見出し)になる
data = [
["製品コード", "製品名", "カテゴリ", "在庫数"],
["A-001", "リンゴ", "果物", 50],
["A-002", "ミカン", "果物", 80],
["B-001", "キャベツ", "野菜", 30],
["B-002", "レタス", "野菜", 45],
]
for row in data:
ws.append(row)
# Tableオブジェクトを作成
# displayName: Excel上で表示されるテーブル名
# ref: テーブルの適用範囲 (A1からデータがある最後のセルまで)
tab = Table(displayName="在庫リスト", ref="A1:D5")
# テーブルに適用するスタイルを定義
# name: Excelの「テーブルデザイン」にあるスタイル名
# showRowStripes: Trueで行が縞模様になる
style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=False,
showLastColumn=False, showRowStripes=True, showColumnStripes=False)
tab.tableStyleInfo = style
# 作成したテーブルをシートに追加
ws.add_table(tab)
wb.save("filterable_table.xlsx")このPythonスクリプトを実行してfilterable_table.xlsxを開いてみてください。見出し行(製品コード、製品名など)の右側に、フィルターと並べ替えができる▼ボタンが表示されているはずです。
テーブルのデザインを変更する
テーブルの見た目はTableStyleInfoのname属性で自由に変更できます。Excelの「テーブルデザイン」ギャラリーにある様々なスタイルを名前で指定可能です。
- シンプルなデザイン:
TableStyleLight[1-21] - 標準的なデザイン:
TableStyleMedium[1-28] - 濃い色のデザイン:
TableStyleDark[1-11]
例えば、緑色のデザインにしたい場合は、以下のようにスタイル部分を変更します。
# ... (前のコードのスタイル部分を変更) ...
style = TableStyleInfo(name="TableStyleMedium11", showRowStripes=True)
tab.tableStyleInfo = styleテーブル作成時の注意点
- 見出し行は必須: テーブルに変換する範囲の最初の行は、必ず見出しとして扱われます。データに見出しがない場合は、作成してからテーブル化してください。
- テーブル名はブック内で重複させない:
displayNameで指定する名前は、同じExcelファイル内でユニークである必要があります。 - 参照範囲を正しく指定:
refで指定する範囲が、データの範囲と正確に一致していることを確認してください。
既存のテーブル情報を確認する
openpyxlでは、既存のExcelファイルを開いて、そこに含まれるテーブルの情報を読み取ることもできます。ws.tablesでシート内のテーブルにアクセスできます。
wb_load = openpyxl.load_workbook("filterable_table.xlsx")
ws_load = wb_load.active
# "在庫リスト" という名前のテーブルの情報を表示
target_table = ws_load.tables["在庫リスト"]
print(f"テーブル名: {target_table.displayName}")
print(f"テーブル範囲: {target_table.ref}")まとめ
今回は、openpyxlのTable機能を使って、Pythonから直接フィルター付きの表を作成する方法を解説しました。
ws.add_table()メソッドで、指定した範囲をテーブルに変換できる- テーブル化すると、見出しにフィルターと並べ替え機能が自動で付与される
TableStyleInfoを使えば、縞模様など見やすいデザインを簡単に適用可能
この機能を活用すれば、Pythonで出力した単なるデータの一覧が、ユーザーにとって格段に使いやすく、見やすいレポートに変わります。ぜひ日々の業務の自動化に取り入れて、Excelファイルのクオリティを向上させてください。


コメント