PythonでExcelファイルをカスタマイズ!ヘッダーの色付け、罫線の追加、数値のカンマ区切りを一括処理する方法

Python

こんにちは!今回は、Pythonを使ってExcelファイルを高度にカスタマイズする方法を紹介します。特に、データの可読性を高めるためのヘッダーへの色付けや、罫線の追加数値のカンマ区切りについて説明します。Pythonのopenpyxlライブラリを活用することで、Excelファイルの操作が簡単に行えます。

この記事を読み終わる頃には、次のような操作ができるようになっています。

  • ヘッダーに色を付ける
  • 奇数行と偶数行で背景色を変える
  • 特定の列にカンマ区切りのフォーマットを適用
  • 列幅を自動で調整して、日本語の文字が隠れないようにする

それでは、実際のコードとともに、Excelファイルのカスタマイズ方法について詳しく見ていきましょう。

PythonでExcelを操作するための準備

PythonでExcelファイルを操作するためには、openpyxlというライブラリを使います。まずはこのライブラリをインストールしましょう。すでにインストール済みの方は、このステップを飛ばして構いません。

pip install openpyxl

openpyxlを使うことで、Excelファイルの読み込みや編集、保存が可能になります。今回の例では、既存のExcelファイルを読み込み、ヘッダーやデータのフォーマットを変更して保存する一連の操作を行います。

使用するサンプルデータ

今回のコードでは、「TradePrice」列(H列)をはじめ、D, I, K, N, O, V, X, Y列に対してもカンマ区切りのフォーマットを適用する例を示します。サンプルデータとして前回の記事で作成した不動産情報ライブラリから取得した以下のようなExcelファイルを想定していますが、ご自身のExcelファイルに合わせてコードをカスタマイズできます。

Screenshot

それでは、実際にカスタマイズしていくコードを見ていきましょう。

ヘッダーに色を付け、罫線を引くコード

まず、ヘッダーに背景色を付け、罫線を引く処理から始めます。これにより、Excelファイルの見栄えが良くなり、データが整理されて見やすくなります。

それでは、実際にカスタマイズしていくコードを見ていきましょう。

from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment, Font

# 既存のエクセルファイルを読み込む
file_path = "existing_file.xlsx"  # 既存のExcelファイルのパスを指定
wb = load_workbook(file_path)
ws = wb.active  # 最初のシートを取得

# ヘッダーの設定
header_fill = PatternFill(start_color="FFCCFFCC", end_color="FFCCFFCC", fill_type="solid")
header_font = Font(bold=True)
header_alignment = Alignment(horizontal="center")
border_style = Border(
    left=Side(style="thin"),
    right=Side(style="thin"),
    top=Side(style="thin"),
    bottom=Side(style="thin")
)

# ヘッダーに色を付ける
for col in range(1, ws.max_column + 1):
    cell = ws.cell(row=1, column=col)
    cell.fill = header_fill
    cell.font = header_font
    cell.alignment = header_alignment
    cell.border = border_style

ここでは、PatternFillを使ってヘッダーの背景色を緑色(#FFCCFFCC)に設定し、罫線を追加しています。Alignmentを使ってテキストを中央揃えにし、Fontで太字にしています。

奇数行と偶数行に背景色を設定する

次に、行ごとに背景色を変えることで、データが見やすくなるようにしましょう。偶数行に薄いグレーの背景色を適用します。

# 行ごとに背景色と罫線を設定
row_fill = PatternFill(start_color="FFEEEEEE", end_color="FFEEEEEE", fill_type="solid")

for row in range(2, ws.max_row + 1):
    for col in range(1, ws.max_column + 1):
        cell = ws.cell(row=row, column=col)
        # 偶数行に背景色を設定
        if row % 2 == 0:
            cell.fill = row_fill
        cell.border = border_style

このコードでは、偶数行に対してPatternFillを使い、薄いグレー(#FFEEEEEE)の背景色を設定しています。行ごとに色を変えることで、行の境界がわかりやすくなります。

数値のカンマ区切りを適用する

次に、数値データにカンマ区切りを適用します。これにより、数値が見やすくなり、大きな数字も瞬時に認識できるようになります。

# 数値にカンマ区切りを設定する列( H, I, K, N, O, V, X, Y)
comma_columns = [ 8, 9, 11, 14, 15, 22, 24, 25]  # 列番号(A=1, B=2, ..., D=4, H=8)

for row in range(2, ws.max_row + 1):  # ヘッダー以外の行を処理
    for col in comma_columns:
        cell = ws.cell(row=row, column=col)
        if isinstance(cell.value, (int, float)):  # 数値の場合のみ処理
            cell.number_format = '#,##0'  # カンマ区切りの数値フォーマットを適用

このコードでは、指定した列に対して数値フォーマット(カンマ区切り)を適用しています。カンマ区切りにすることで、数値が非常に読みやすくなります。

列幅の自動調整と日本語文字の考慮

最後に、列幅を自動で調整するコードです。日本語の文字がある場合、それらが見えなくならないよう、幅を2倍に設定しています。

# 列幅を自動調整する(日本語文字を考慮)
for col in ws.columns:
    max_length = 0
    column = col[0].column_letter  # 列の文字(A, B, C...)
    for cell in col:
        if cell.value:
            # 文字の長さを計算し、日本語文字が含まれている場合は倍率を大きくする
            length = len(str(cell.value))
            if any('\u3000' <= char <= '\u9FFF' for char in str(cell.value)):  # 漢字や日本語が含まれる場合
                length *= 2  # 漢字の場合は文字数を2倍にする
            max_length = max(max_length, int(length))
    adjusted_width = (max_length + 2)  # 適度な余白を加える
    ws.column_dimensions[column].width = adjusted_width

このコードでは、各列の最大文字数を計算し、それに応じて幅を調整します。日本語が含まれるセルに対しては、幅を広く設定することで文字が隠れないようにしています。

最終的には以下のようなファイルが生成されます。

Screenshot

まとめ

以上、Pythonとopenpyxlを使ったExcelファイルのカスタマイズ方法を紹介しました。この方法を使うことで、データの可読性が向上し、見栄えも良くなります。今後、さらに複雑なカスタマイズを行いたい場合でも、openpyxlは非常に強力なツールですので、ぜひ活用してみてください!

Excelのデータ整理を効率化したい方は、このコードを参考にして、日常業務に役立ててください。

全コードは以下の通りです。

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill, Border, Side, Alignment, Font

# 既存のエクセルファイルを読み込む
file_path = "existing_file.xlsx"  # 既存のExcelファイルのパスを指定
wb = load_workbook(file_path)
ws = wb.active  # 最初のシートを取得

# ヘッダーの設定
header_fill = PatternFill(start_color="FFCCFFCC", end_color="FFCCFFCC", fill_type="solid")
header_font = Font(bold=True)
header_alignment = Alignment(horizontal="center")
border_style = Border(
    left=Side(style="thin"),
    right=Side(style="thin"),
    top=Side(style="thin"),
    bottom=Side(style="thin")
)

# ヘッダーに色を付ける
for col in range(1, ws.max_column + 1):
    cell = ws.cell(row=1, column=col)
    cell.fill = header_fill
    cell.font = header_font
    cell.alignment = header_alignment
    cell.border = border_style

# 行ごとに背景色と罫線を設定
row_fill = PatternFill(start_color="FFEEEEEE", end_color="FFEEEEEE", fill_type="solid")

for row in range(2, ws.max_row + 1):
    for col in range(1, ws.max_column + 1):
        cell = ws.cell(row=row, column=col)
        # 偶数行に背景色を設定
        if row % 2 == 0:
            cell.fill = row_fill
        cell.border = border_style

# 列幅を自動調整する(日本語文字を考慮)
for col in ws.columns:
    max_length = 0
    column = col[0].column_letter  # 列の文字(A, B, C...)
    for cell in col:
        if cell.value:
            # 文字の長さを計算し、日本語文字が含まれている場合は倍率を大きくする
            length = len(str(cell.value))
            if any('\u3000' <= char <= '\u9FFF' for char in str(cell.value)):  # 漢字や日本語が含まれる場合
                length *= 2  # 漢字の場合は文字数を2倍にする
            max_length = max(max_length, int(length))
    adjusted_width = (max_length + 2)  # 適度な余白を加える
    ws.column_dimensions[column].width = adjusted_width

# 数値にカンマ区切りを設定する列(H, I, K, N, O, V, X, Y)
comma_columns = [8, 9, 11, 14, 15, 22, 24, 25]  # 列番号(A=1, B=2, ..., D=4, H=8)

for row in range(2, ws.max_row + 1):  # ヘッダー以外の行を処理
    for col in comma_columns:
        cell = ws.cell(row=row, column=col)
        if isinstance(cell.value, (int, float)):  # 数値の場合のみ処理
            cell.number_format = '#,##0'  # カンマ区切りの数値フォーマットを適用

# 変更を保存する
wb.save("updated_file_with_commas.xlsx")

コメント

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