pythonでExcel操作をする際に使用するopenpyxl
でのよく使う操作について備忘録的にまとめました。
インストール
pip install openpyxl
ファイル操作
Excelファイルの新規作成
wb = openpyxl.Workbook()
Excelファイルの読み込み
wb = openpyxl.load_workbook('input_file.xlsx')
Excelファイルの読み込み(数式の計算結果を読み込む場合)
wb = openpyxl.load_workbook("input_file.xlsx", data_only=True)
Excelファイルの保存
wb.save('input_file.xlsx')
シートの操作
シートの新規作成
ws = wb.create_sheet(title='hoge')
sheetオブジェクトの取得
ws_list = wb.worksheets
# 出力は、sheetオブジェクトのリスト [<Worksheet "Sheet">]
ws = wb["シート名"]
シート名の取得
wb.sheetnames
# 出力はシート名のリスト ['Sheet1', 'Sheet2', 'Sheet3', 'Sheet4']
シートの削除 (引数はworksheetオブジェクト)
wb.remove(ws)
新規ファイル作成時はデフォルトでシート名Sheetが存在してるので不要な場合は以下で削除。
wb.remove(wb.worksheets[0])
# or
wb.remove(wb["Sheet"])
セルの操作
セルの取得
アドレス、行列番号で指定(固定値になるのであまり使わない)
# アドレス指定
cell = ws["A1"]
#
cell = ws.cell(row=1, col=1)
# 引数省略可
cell = ws.cell(1, 1)
セルの内容を取得
val = cell.value
セルの内容を操作
cell.value = 'hoge'
cell.value
の初期値はNone
行列ごとのセルの操作
行ごとの操作
for row in ws.rows:
for cell in row:
行ごとの操作(範囲指定)
min_row, min_colは1からカウント
for row in ws.iter_rows(min_row=1, min_col=1, max_row=8, max_col=10):
for cell in row:
列ごとの操作
for col in ws.cols:
for cell in col:
列ごとの操作(範囲指定)
for col in ws.iter_cols(min_row=5, min_col=1, max_row=200, max_col=40):
for cell in col:
所感では範囲指定しない操作だと処理の途中で行列操作が終わってしまうことがある。
特に既存のファイルを開いた場合だと、セルに値が存在する部分までしか操作できないため、範囲指定するのがベター。
範囲指定はmaxを指定しないといけないので、途中でbreak処理を入れるなりする。
セルの配置, 色, 枠線の操作
import
from openpyxl.styles import Alignment, PatternFill
from openpyxl.styles.borders import Border, Side
セルの配置
セルの値の配置を設定
alignment = Alignment(horizontal='横位置', vertical='縦位置')
横位置
- left: 左揃え
- center: 中央揃え
- right: 右揃え
縦位置
- bottom: 上揃え
- center: 中央揃え
- right: 下揃え
セルの値を折り返して全体表示する
alignment_whole = Alignment(wrap_text=True)
セルの値を縮小して全体表示する
alignment_whole = Alignment(shrink_to_fit =True)
セルに配置設定を適用
cell.alignment = alignment_whole
セルの色の操作
light_yellow_fill = PatternFill(fgColor='ffff4d', bgColor='ffff4d', fill_type='solid')
詳細設定方法はこちらが分かりやすかった。https://qiita.com/rihu-do/items/3add2ab4bffe600ee300
カラーコードは、こちらのサイトが参考になった。https://www.colordic.org/colorsample
セルに配色設定の適用
cell.fill = light_yellow_fill
セルの枠線の操作
枠線の設定
side = Side(style='thin', color='000000')
border = Border(top=side, bottom=side, left=side, right=side)
詳細はこちらが分かりやすい。https://qiita.com/github-nakasho/items/358e5602aeda81c58c81
枠線の適用
cell.border = border
値が存在するセルに対して枠線を適用する
def write_border_line(_workbook):
for _worksheet in _workbook:
for _row in _worksheet:
for _cell in _row:
if _cell.value:
_cell.border = border
参考
ドキュメント
https://openpyxl.readthedocs.io/en/stable/index.html