こんにちは。てちてちエンジニアのおっとーです。
Excelファイルから特定の書式を洗い出したいなんて需要有ったりするんじゃないでしょうか。
今回はそんなときに使用できるPythonプログラムを紹介します。
投稿の最後に今回紹介するコードをまとめてます。
コピペする方は目次のさいごまで飛んでください。
openpyxlのインストール
今回はPythonからExcelファイルを読み込むためにopenpyxlというパッケージをインストールします。
pip install openpyxl
パッケージをインポート
Pythonファイルからパッケージを読み込みます。
openpyxl.utilsは便利な関数が詰め込まれています。
今回はutils.cellに含まれるget_column_letter関数で列番号に対するアルファベットを取得してます。
import openpyxl
import openpyxl.utils
ワークシートを読み込む
wb = openpyxl.load_workbook('path/to/filename.xlsx')
ws = wb['シート名']
有効セル(使用済みセル)から取り消し線を含むセルを全て書き出す
有効セルを左上から右下方向へ判定していき、取り消し線が使用されている場合そのセルの番地を書き出します。
上図のような状態だとB2からG10までが有効セルです。
for row in range(ws.min_row, ws.max_row + 1):
for column in range(ws.min_column, ws.max_column + 1):
if ws.cell(row=row,column=column).font.strike:
print(f'{openpyxl.utils.get_column_letter(column)}{row}') #結果 B2、C8
print(f'({row},{column})') # 結果(2,2) (8,3)
注:range関数で行数と列数を回す際、終了行列は最大行列に+1を忘れないこと!
他の書式を書き出してみる
ifws.cell(row=row,column=column).font.strike:
....
この行の「strike」が取り消し線を意味しているので、変更すれば他の書式にも対応可能。
strike もしくは strikethrough | 取り消し線 |
b もしくは bold | 太字 |
i もしくは italic | 斜体 |
u もしくは underline | 下線 |
文字色が使用されているセル探してみる
font.colorを取得するとオブジェクトが取得される。
その中のrgbプロパティにカラーコードが返されるので、下記のように文字列でカラーコードの判定を行うことで、
特定の文字色が使用されているセルを洗い出すことができる。
ifws.cell(row=row,column=column).font.color.rgb =='カラーコード':
....
さいごに
一定条件を満たしたセルに対して何かしら操作を行う機会は多いと思います。
今回紹介した有効セル範囲に対するループの回し方と判定条件の組み合わせが一助となれば幸いです。
import openpyxl
import openpyxl.utils
wb = openpyxl.load_workbook('path/to/filename.xlsx')
ws = wb['シート名']
for row in range(ws.min_row, ws.max_row + 1):
for column in range(ws.min_column, ws.max_column + 1):
if ws.cell(row=row,column=column).font.strike:
# 取り消し線の処理
if ws.cell(row=row,column=column).font.u:
# 下線時の処理
if ws.cell(row=row,column=column).font.b:
# 太字時の処理
if ws.cell(row=row,column=column).font.i:
# 斜体時の処理
if ws.cell(row=row,column=column).font.color.rgb == 'カラーコード':
# 指定カラーコード時の処理