こんにちは、タナカです。
この記事では、openpyxlを使ってセルの背景色を0-255まで変化させる方法を紹介します。
openpyxlについては【openpyxl】Excelのセル情報を取得する方法で基本的な操作方法を解説していますので、ぜひ参考にしてください。
この記事の内容
- エクセルのセルの背景色をRGB(0-255)で変化させる
1. セルの背景色を変更
セルの背景色をopenpyxlを使って、0-255まで変化させたときのイメージがこちらになります。
左が0で右に行くにつれて画素値を255まで増加させています。
画素値の変化を可視化したかったので作成しました。赤、緑、青、グレーそれぞれの色を0-255まで変化させています。
2. 背景色を変更するコード
背景色を変更するコードはこのようになります。コードの詳細については、コメントをご確認ください。
import openpyxl
from openpyxl.styles import PatternFill
file_path = 'target_file.xlsx'
# excel_fileの読み込み
wb = openpyxl.load_workbook(file_path)
# ワークシートの指定
ws = wb['Sheet1']
colors = ['red', 'green', 'blue', 'gray']
for color in colors:
# 色が赤の場合
if color == 'red':
for i in range(256):
# RGB配列で指定
color = (i, 0, 0)
# RBG配列を16進数に変換(openpyxlの仕様上16進数のみ対応)
hex_color = str.format('{:02x}{:02X}{:02X}', color[0], color[1], color[2])
# fill情報書き換え
ws.cell(row = 2, column = i + 2).fill = PatternFill(patternType='solid', fgColor = hex_color, bgColor = hex_color)
# 色が緑の場合
elif color == 'green':
for i in range(256):
# RGB配列で指定
color = (0, i, 0)
# RBG配列を16進数に変換(openpyxlの仕様上16進数のみ対応)
hex_color = str.format('{:02x}{:02X}{:02X}', color[0], color[1], color[2])
# fill情報書き換え
ws.cell(row = 3, column = i + 2).fill = PatternFill(patternType='solid', fgColor = hex_color, bgColor = hex_color)
# 色が青の場合
elif color == 'blue':
for i in range(256):
# RGB配列で指定
color = (0, 0, i)
# RBG配列を16進数に変換(openpyxlの仕様上16進数のみ対応)
hex_color = str.format('{:02x}{:02X}{:02X}', color[0], color[1], color[2])
# fill情報書き換え
ws.cell(row = 4, column = i + 2).fill = PatternFill(patternType='solid', fgColor = hex_color, bgColor = hex_color)
# 色がグレーの場合
elif color == 'gray':
for i in range(256):
# RGB配列で指定
color = (i, i, i)
# RBG配列を16進数に変換(openpyxlの仕様上16進数のみ対応)
hex_color = str.format('{:02x}{:02X}{:02X}', color[0], color[1], color[2])
# fill情報書き換え
ws.cell(row = 5, column = i + 2).fill = PatternFill(patternType='solid', fgColor = hex_color, bgColor = hex_color)
# ファイルの保存
wb.save(file_path)
for文を使って、RGBおよびグレースケールの輝度値を0から255まで変化させています。
自分が調べた限りでは、openpyxlの仕様なのか、背景色の指定には16進数しか対応していないため、RGB配列を16進数に変換しています。
16進数に変換したものをPatternFillクラスの引数として入れています。
まとめ
今回は、openpyxlを使ってセルの背景色をRGBおよびグレースケールで0-255まで変化させていました。
RGB配列から16進数に変換する方法など参考にしていただければ幸いです。