【Python】EXCEL自動化-OpenPyXL

せっかく自動化したのに、見た目が真っ白な表だと結局あとで手直しが必要になりますよね。

現役エンジニアの私も、最初は「OpenPyXLの書き方って独特だな…」と苦労しました。でも、一度「型(テンプレート)」を覚えてしまえば、二度と手作業でポチポチ色を塗る必要はなくなります。

今回は、初心者の方がそのままコピペして使える「セルの色付けと罫線の引き方」を、どこよりも分かりやすく解説します!


必要なパーツを読み込もう

OpenPyXLでデザインをいじるには、標準の機能に加えて「デザイン用の部品(スタイル)」を読み込む必要があります。まずはここをコードの先頭に貼り付けましょう。

“`python
import openpyxl

デザイン調整に必要な部品たち

from openpyxl.styles import PatternFill, Border, Side, Alignment
“`


1. セルに色を塗る(PatternFill)

「見出しをグレーにしたい」「特定の項目を赤くしたい」ときは、PatternFillを使います。

“`python

新しいExcelファイルを作る

wb = openpyxl.Workbook()
ws = wb.active

【色を指定する】

start_color, end_colorに「16進数のカラーコード(RRGGBB)」を指定します

※よく使う色:薄いグレー(D3D3D3)、黄色(FFFF00)、青(0000FF)

fill = PatternFill(patternType=’solid’, fgColor=’D3D3D3′)

セルA1に適用する

ws[‘A1’] = “項目名”
ws[‘A1’].fill = fill

wb.save(‘design_test.xlsx’)
“`
ポイント:
色は「RGB」という6桁の英数字(16進数)で指定します。Excelの「色の設定」画面で見れるコードと同じです。


2. 罫線を引く(Border & Side)

罫線は「線の種類(Side)」を決めてから、それを「上下左右のどこに引くか(Border)」という2段階の設定で動かします。

“`python

1. 線の種類を決める(thin=細線, thick=太線, double=二重線など)

side = Side(style=’thin’, color=’000000′)

2. 上下左右にその線を適用する設定を作る

border = Border(top=side, bottom=side, left=side, right=side)

セルB2に適用する

ws[‘B2’] = “枠線あり”
ws[‘B2’].border = border
“`


【実践】コピペで完成!表を丸ごと装飾するコード

一つずつ設定するのは大変なので、「見出しを装飾して、表全体に線を引く」という実務で一番使うパターンをまとめました。

“`python
import openpyxl
from openpyxl.styles import PatternFill, Border, Side, Alignment

def auto_format_excel():
wb = openpyxl.Workbook()
ws = wb.active

# サンプルデータ
data = [
    ["ID", "名前", "売上"],
    [1, "田中", 5000],
    [2, "佐藤", 7500],
    [3, "鈴木", 3000]
]

for row in data:
    ws.append(row)

# デザインの定義
header_fill = PatternFill(patternType='solid', fgColor='4F81BD') # 濃い青
side = Side(style='thin', color='000000')
border = Border(top=side, bottom=side, left=side, right=side)
center_align = Alignment(horizontal='center')

# 1行目(見出し)だけデザインを変える
for cell in ws[1]:
    cell.fill = header_fill
    cell.alignment = center_align
    # 見出しの文字色を白にする場合はこちら(追加でFontのインポートが必要)
    # cell.font = openpyxl.styles.Font(color="FFFFFF", bold=True)

# 全てのセルに罫線を引く
for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
    for cell in row:
        cell.border = border

wb.save('売上表_自動装飾.xlsx')
print("作成が完了しました!")

auto_format_excel()
“`


よくあるエラーと対処法

1. 「カラーコードを指定したのに色が変」

OpenPyXLでは、カラーコードの前に「#」を入れないでください。
#D3D3D3
D3D3D3

2. 「範囲指定(A1:C10)に一気に色を塗りたい」

実はOpenPyXLには、範囲に対して一括でデザインを適用するコマンドがありません。
面倒に見えますが、上記のコードのようにfor文を使って1セルずつループで適用するのが、一番確実でエラーの出ない方法です。


まとめ:自動化で「見た目」も100点に

「OpenPyXLは見た目の調整が難しい」と思われがちですが、一度自分のお気に入りのデザイン設定を関数化しておけば、次からはそれを呼び出すだけでプロ級のレポートが完成します。

これで、Excelを開いて「罫線を引いて、色を塗って…」という無駄な5分間から解放されます。ぜひ活用して、どんどん業務を楽にしていきましょう!

コメント

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