📃

openpyxlでタイトル行だけ書式を変える

2023/08/05に公開

イントロダクション

PythonでExcelを扱えるopenpyxlライブラリを使用して、シートの先頭行だけ書式を変える方法を説明します。

動作環境

  • Windows 11
  • Python 3.11.2
  • openpyxl 3.1.2

コードと実行結果

from openpyxl import Workbook
from openpyxl.styles import PatternFill

wb = Workbook()
ws = wb.active

# サンプル内容の書き込み
content = [['1A', '1B', '1C'],
           ['2A', '2B', '2C'],
           ['3A', '3B', '3C']]
for row in content:
    ws.append(row)

# 先頭行のセルの書式を変更
for cell in next(ws.rows):
    cell.fill = PatternFill(patternType='solid', fgColor='ff0000')

# 名前をつけて保存
wb.save('sample.xlsx')

コードの説明

先頭行のセルを処理する

rowsプロパティで取得できるのはジェネレーターオブジェクトなので、next()関数で先頭の値を取り出しています。

for cell in next(ws.rows):

下記の例のように、リストに変換してから先頭の値を取り出すこともできます。ただし、データ量が大きい場合は効率が落ちてしまいます。

for cell in list(ws.rows)[0]:

なお、ジェネレーターオブジェクトからはインデックスを使って値を取り出すことができないので、下記のようなコードはエラーが出ます。

for cell in ws.rows[0]:

TypeError: 'generator' object is not subscriptable

書式を変更する

PatternFillオブジェクトを使用して書式を指定します。今回の例では、前景色を赤にして塗りつぶしています。

cell.fill = PatternFill(patternType='solid', fgColor='ff0000')

書式の指定方法については様々なサイトが紹介していますので、詳しくはそちらを参照ください。

参考資料

openpyxl.worksheet.worksheet module

Discussion