Python×Excelでセルに色を付ける

画像処理

Excelをプログラムで操作するというと、VBAがまず考えられます。しかし、VBAは制約が多く書き方も特殊なので使いづらく感じられるかもしれません。今日は、pythonでExcelを操作する方法、まずはセルに色を付ける方法とその応用編を紹介します。

Excelに色を付ける方法:基本編

今回はこちらのExcelファイルを使用します。令和四年度の男子のみの学校、女子のみの学校を集計したデータです。

import openpyxl
from openpyxl.styles import PatternFill

#ブックの読み込み
filepath = 'sy0127.xlsx'
workbook = openpyxl.load_workbook(filename=filepath)
worksheet = workbook['127']

#セルに色を塗る
worksheet['A1'].fill = PatternFill(patternType='solid', fgColor='e6e6fa')
#保存
workbook.save(filepath)

このコードを実行するとA1セルの色が変わりました。

PythonでExcelを操作する場合、openpyxlというライブラリがよく使用されています。色を塗るほかにも、シートからデータを取得してPythonで処理したり、Excel上にグラフを作ったりと幅広い用途に使えます。
openpyxlがインストールされていない場合は、まずライブラリをインストールします。
ワークブックを読み込み、処理を行いたいワークシート名を指定します。
「fgColor」の部分でcolorコードを使用してA1セルに背景色を設定しています。

Excelに色を付ける方法:中級編

次に範囲を指定して色を塗る方法です

import openpyxl
from openpyxl.styles import PatternFill

filepath = 'sy0127.xlsx'
workbook = openpyxl.load_workbook(filename=filepath)
worksheet = workbook['127']

#7行目の男子の色を水色にする
for row in worksheet['B7':'K7']:
    for cell in row:
        cell.fill = PatternFill(patternType='solid', fgColor='87cefa')
#8行目女子の色をピンクにする
for row in worksheet['B8':'K8']:
    for cell in row:
        cell.fill = PatternFill(patternType='solid', fgColor='ffc0cb')

workbook.save(filepath)

worksheetで範囲を指定した場合はセルがタプルが返ってくるので、そのタプルをfor文で回して処理しています。worksheet[‘B7′:’K7’]の部分で男子のみの学校、worksheet[‘B8′:’K8’]の部分で女子のみの学校の範囲を指定し、それぞれ水色とピンク色をを指定しています。

Excelに色を付ける方法:実用性のない応用編

最後に、上記のコードを応用してExcel上に絵を表現する方法を紹介します。

まずこちらの絵を用意しました。有名なモナリザですね。
openpyxlとPILという画像用のライブラリを利用してExcel上にモナリザを描いていきます。
PILでピクセルごとのカラーコードを取得して、取得したカラーコードを各セルの背景色に設定していきます。

from PIL import Image
import openpyxl
from openpyxl.styles import PatternFill

#新しいブックを作成
wb = openpyxl.Workbook()
ws = wb.create_sheet('Mona_Lisa')

#画像読み込み
img = Image.open('Mona_Lisa.jpg')
width, height = img.size
pixels = img.load()
ws = wb.active

#カラーコードを取得する配列の定義
color_codes = [[0 for j in range(height)] for i in range(width)]

for x in range(width):
    #列幅調整
    col = ws.cell(row=1,column=x+1).column_letter
    ws.column_dimensions[col].width = 1.88
    for y in range(height):
        #画像からカラーコードを取得
        color_codes[x][y] = hex(pixels[x, y][0])[2:].zfill(2) + hex(pixels[x, y][1])[2:].zfill(2) + hex(pixels[x, y][2])[2:].zfill(2)
        #ワークシートに背景色を設定する
        color=color_codes[x][y]
        ws.cell(row=y+1, column=x+1).fill = PatternFill(patternType='solid', fgColor=color)

wb.save('Mona_Lisa.xlsx')

Excel上にモナリザが現れましたね。
今回はPythonでExcelを操作するopenpyxlでセルに色を塗る方法をご紹介しました。openpyxlにはまだまだ様々な機能がありますのでまたご紹介できればと思います。

コメント

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