複数列にまたがる見出しを作成する場合、Excel では「セル結合」と「中央揃え」を併用すると読みやすいレイアウトになります。Python の openpyxl を使えば、セル結合・塗りつぶし・罫線設定をスクリプトで自動化できます。ここでは 行 3 の列 D~L を 1 つの見出しセルにまとめ、見た目を揃える具体例をご紹介いたします。
目次
動作環境
項目 | 内容 |
---|---|
Python | 3.9 以上 |
ライブラリ | openpyxl(pip install openpyxl ) |
入力ファイル例 | attendance_log.xlsx |
出力ファイル例 | attendance_log_header.xlsx |
サンプルコード
from openpyxl import load_workbook
from openpyxl.styles import Alignment, Border, PatternFill, Side
# 1. ワークブックを読み込み
wb = load_workbook("attendance_log.xlsx")
ws = wb.active
# 2. 書式定義
header_fill = PatternFill(fgColor="9BC2E6", fill_type="solid") # ブルー系
center_align = Alignment(horizontal="center", vertical="center") # 中央揃え
thin_side = Side(color="000000", border_style="thin") # 細線
thin_border = Border(left=thin_side, right=thin_side,
top=thin_side, bottom=thin_side)
# 3. 見出しセルの結合範囲を指定
header_row = 3
start_col = 4 # 列 D
end_col = 12 # 列 L
ws.merge_cells(start_row=header_row, start_column=start_col,
end_row=header_row, end_column=end_col)
# 4. 結合セルに書式を適用
header_cell = ws.cell(header_row, start_col)
header_cell.value = "月次サマリー"
header_cell.fill = header_fill
header_cell.alignment = center_align
# 5. 罫線を各セルへ設定(結合による内部セルも含む)
for col in range(start_col, end_col + 1):
ws.cell(header_row, col).border = thin_border
# 6. 保存
wb.save("attendance_log_header.xlsx")
コードの解説
ステップ | 説明 |
---|---|
セル結合 | ws.merge_cells(start_row, start_column, end_row, end_column) へ範囲を渡します。 |
塗りつぶし (PatternFill ) | fill_type='solid' と 16 進 RGB で色を指定します。 |
中央揃え (Alignment ) | horizontal と vertical の両方を 'center' に設定すると、完全な中央配置になります。 |
罫線 (Border ) | 結合セル内の“実セル”すべてに罫線を繰り返し適用します。これにより、結合後も外枠が崩れません。 |
応用ポイント
要件 | 実装ヒント |
---|---|
行見出しを複数行結合 | end_row を増やし、行方向にも結合を拡大します。 |
セル結合を解除 | ws.unmerge_cells("D3:L3") を実行します。 |
段落ごとに色を変更 | 複数の PatternFill をあらかじめ用意し、結合範囲ごとに適用します。 |
まとめ
- セル結合 と 中央揃え をコードで自動化することで、テンプレート通りの見出し行を瞬時に再現できます。
PatternFill
とBorder
を組み合わせると、デザインの一貫性が保たれ、読みやすさが向上します。- openpyxl の範囲指定は列番号・行番号で制御できるため、動的なレイアウト変更にも柔軟に対応できます。
業務報告書や月次レポートを自動生成する際に、ぜひお役立てください。