Pythonを使って、既存のエクセルファイルのセルを、塗りつぶしや網掛けにしたい!
そんなお悩みを、Python歴3年の私ができるだけわかりやすく解説し、解決に導きます。
実行見本
全コード
ひとまず全コードを網羅します。
色んなパターンを網羅しているため少々長いですが、本質部分は短いです。
解説は後ほど行います。
import openpyxl
from openpyxl.styles import PatternFill
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
fill_solid_red = PatternFill(patternType='solid', fgColor='FF0000')
fill_solid_blue = PatternFill(patternType='solid', fgColor='0000FF')
fill_solid_gray = PatternFill(patternType='solid', fgColor='808080')
fill_solid_black = PatternFill(patternType='solid', fgColor='000000')
fill_dd_gray = PatternFill(patternType='darkDown', fgColor='808080')
fill_ld_gray = PatternFill(patternType='lightDown', fgColor='808080')
fill_dv_gray = PatternFill(patternType='darkVertical', fgColor='808080')
fill_lv_gray = PatternFill(patternType='lightVertical', fgColor='808080')
fill_dg_gray = PatternFill(patternType='darkGray', fgColor='808080')
fill_lg_gray = PatternFill(patternType='lightGray', fgColor='808080')
fill_mg_gray = PatternFill(patternType='mediumGray', fgColor='808080')
fill_dgr_gray = PatternFill(patternType='darkGrid', fgColor='808080')
fill_lgr_gray = PatternFill(patternType='lightGrid', fgColor='808080')
fill_dt_gray = PatternFill(patternType='darkTrellis', fgColor='808080')
fill_lh_gray = PatternFill(patternType='lightHorizontal', fgColor='808080')
fill_dh_gray = PatternFill(patternType='darkHorizontal', fgColor='808080')
fill_lu_gray = PatternFill(patternType='lightUp', fgColor='808080')
fill_du_gray = PatternFill(patternType='darkUp', fgColor='808080')
ws['A1'].fill = fill_solid_red
ws['A2'].fill = fill_solid_blue
ws['A3'].fill = fill_solid_gray
ws['A4'].fill = fill_solid_black
ws['B1'].fill = fill_dd_gray
ws['B2'].fill = fill_ld_gray
ws['B3'].fill = fill_dv_gray
ws['B4'].fill = fill_lv_gray
ws['B5'].fill = fill_dg_gray
ws['B6'].fill = fill_lg_gray
ws['B7'].fill = fill_mg_gray
ws['B8'].fill = fill_dgr_gray
ws['B9'].fill = fill_lgr_gray
ws['B10'].fill = fill_dt_gray
ws['B11'].fill = fill_lh_gray
ws['B12'].fill = fill_dh_gray
ws['B13'].fill = fill_lu_gray
ws['B14'].fill = fill_du_gray
wb.save('input.xlsx')
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
解説
インポート
import openpyxl
from openpyxl.styles import PatternFill
「openpyxl」のインポートと、背景色変更をするためのに上記2行を記述します。
背景色を変数に代入
fill_solid_red = PatternFill(patternType='solid', fgColor='FF0000')
背景色の情報をひとまず変数に代入します。
【 変数 = PatternFill(patternType=’塗り方’, fgColor=’色コード’ 】
塗りつぶし無しにしたい場合は、「patternType=None」と記述してください。
fill_none = PatternFill(patternType=None)
塗り方
上記の例で「塗り方」の「solid」は塗りつぶしを表します。
「網掛け」にしたい場合は、「darkDown」や「lightDown」を指定します。
fill_dd_gray = PatternFill(patternType='darkDown', fgColor='808080')
fill_ld_gray = PatternFill(patternType='lightDown', fgColor='808080')
※今回は網掛けを全て灰色にしていますが、いろんな色にすることが可能です。
色コード
色コード「FF0000」は赤色を表します。
代表的な色コードは、下記の文字色を変更する方法にて紹介しておりますので、ご参考ください。
セルの背景色を変更
ws['A1'].fill = fill_solid_red
左辺の「ws[‘A1’].fill」は、「wsのセルA1の背景色を変更」という意味です。
(背景色を変更する際は「.fill」を付けてください)
右辺の「fill_solid_red」は前項で背景色の情報を代入した変数です。
したがって、この一文で「wsのセルA1の背景色をfill_solid_red(赤色の塗りつぶし)に変更」という処理になります。
【 ワークシート変数[‘セル名’].fill = 背景色を代入した変数 】
下記記事にて先頭行の背景色を変更する方法を解説しておりますので、ご参考ください。
その他の解説
既存ファイル操作の基本解説は下記記事で行っております。ご参考ください。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
まとめ
Pythonでエクセルファイルの背景色を変える方法を解説いたしました。
文字色と同様に背景色を変えると、強調できたりして見やすくなりますので、ぜひ覚えて活用してみてください。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!