PythonでExcelを見やすくする!openpyxlのTable機能でフィルター付きの表を作成しよう

openpyxl

Pythonでデータを出力しただけのExcelファイル、ただ数字と文字が並んでいるだけで、少し見づらいと感じることはありませんか?「このデータで絞り込みができたら…」「行ごとに色が付いていれば見やすいのに…」と思ったことがあるなら、openpyxlTable(テーブル)機能がその悩みを解決します。

この記事では、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を開いてみてください。見出し行(製品コード、製品名など)の右側に、フィルターと並べ替えができる▼ボタンが表示されているはずです。

テーブルのデザインを変更する

テーブルの見た目はTableStyleInfoname属性で自由に変更できます。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}")

まとめ

今回は、openpyxlTable機能を使って、Pythonから直接フィルター付きの表を作成する方法を解説しました。

  • ws.add_table()メソッドで、指定した範囲をテーブルに変換できる
  • テーブル化すると、見出しにフィルターと並べ替え機能が自動で付与される
  • TableStyleInfoを使えば、縞模様など見やすいデザインを簡単に適用可能

この機能を活用すれば、Pythonで出力した単なるデータの一覧が、ユーザーにとって格段に使いやすく、見やすいレポートに変わります。ぜひ日々の業務の自動化に取り入れて、Excelファイルのクオリティを向上させてください。

コメント

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