9
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

openpyxlでよく使う操作についてのまとめ

Last updated at Posted at 2022-04-07

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

9
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?