【python】pythonで条件付き書式のエクセルシートを作成する方法【エクセル】

Python

こんにちは、snuowです。

エクセルでヒートマップを作るために、セルで条件付き書式を設定することがありますよね?

pythonでヒートマップを作ることは容易にできますが、pythonからエクセルのシートに条件付き書式を設定することができることはご存じですか?

今回は、pythonのxlsxwriterとpandasを使って、条件付き書式が設定されたエクセルのシートを出力する方法をご紹介します。

こんな感じの条件付き書式を設定したエクセルのシートを作成できます。

こんな感じのエクセルシートを作成することができます。今回は簡単のためにB2:C3のみ条件付き書式を設定しています。

条件付き書式を設定したエクセルのシートを作成する。

SampleCode

下記のコードで実装できます。

# xl_rangeを使えば、"B2:C3"をxl_range(2,2,3,3)と表現できる。
from xlsxwriter.utility import xl_range
import xlsxwriter
import pandas as pd
import numpy as np

# test用データフレーム
df = pd.DataFrame(np.arange(0,9,1).reshape(3,3))

# workbook生成
workbook = xlsxwriter.Workbook(r'./output_storage/hoge.xlsx')
# xlsxwriterでは、mode='a'は使えない。
writer = pd.ExcelWriter(r'./output_storage/hoge.xlsx',mode='w',engine='xlsxwriter')
sheet_name = 'hoge'

# データフレームをシートに書き込む
df.to_excel(writer,sheet_name=sheet_name,startrow=0,index_label='huga')

# 条件付き書式の設定
ws = writer.sheets[sheet_name]
ws.conditional_format(xl_range(2,2,3,3),
                {'type': '3_color_scale',
                       'min_color': "#44c242",
                       'mid_color': "#ebeb44",
                       'max_color': "#eb4444"})
writer.close()

解説

ライブラリは、下記を読み込みます。numpyはサンプルのデータを作る目的でimportしています。

# xl_rangeを使えば、"B2:C3"をxl_range(2,2,3,3)と表現できる。
from xlsxwriter.utility import xl_range
import xlsxwriter
import pandas as pd
import numpy as np

エクセルシートに書き込むために、データフレームを作成しています。既存のデータがある場合は、そちらを読み込んでデータフレームにしてください。

# test用データフレーム
df = pd.DataFrame(np.arange(0,9,1).reshape(3,3))

書き込むためのエクセルのworkbookを作成しています。

今回は、/output_storage/hoge.xlsxにファイルを作成しています。また、シートの名前はhogeシートとしています。

# workbook生成
workbook = xlsxwriter.Workbook(r'./output_storage/hoge.xlsx')
# xlsxwriterでは、mode='a'は使えない。
writer = pd.ExcelWriter(r'./output_storage/hoge.xlsx',mode='w',engine='xlsxwriter')
sheet_name = 'hoge'

# データフレームをシートに書き込む
df.to_excel(writer,sheet_name=sheet_name,startrow=0,index_label='huga')

最後のこのコードでシートに条件付き書式を設定します。.conditional_format()で条件付き書式を設定できます。

xl_range()で、範囲指定を行っており、xl_range(2,2,3,3)B2:C3を意味しています。

***_colorは、それぞれ色を指定しており、エクセルで言うところの下記の部分に当てはまります。

# 条件付き書式の設定
ws = writer.sheets[sheet_name]
ws.conditional_format(xl_range(2,2,3,3),
                {'type': '3_color_scale',
                       'min_color': "#44c242",
                       'mid_color': "#ebeb44",
                       'max_color': "#eb4444"})
writer.close()

いかがだったでしょうか。こんな形でデータフレームから簡単に条件付き書式を設定したエクセルシートを作ることができます。

これを利用することで、エクセルしか使えないお客様相手の提出にも困ることが減ると思います。

コメント

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