OpenPyXl
Pythonからエクセルをいじくり回せる。(ただし.xlsxのみ。.xlsは非対応)
- Python から Excel を扱うパッケージ比較
他は試してないけど、OpenPyXlは十分扱いやすく、情報も公式・非公式ともにあるためこれ選んどけばいい感。
- 操作一覧紹介
基本
パッケージの概観はこんな感じ。ここでは省略するがグラフなど他のも扱える模様。
[Workbook オブジェクト] |- [Worksheet オブジェクト] | |- [Cell オブジェクト] | | |- font ←[各種Styleオブジェクト]を適用 | | |- border | | ... | |- [Cell オブジェクト] ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import openpyxl# (仮想)Workbook を新規作成wb = openpyxl.Workbook()# 既存の Workbook を開くwb = openpyxl.load_workbook('path.xlsx')# 保存wb.save('path.xlsx')# Worksheet を取得ws = wb.active # 現在アクティブws = wb.worksheets['sheetname'] # 名前を指定ws = wb.create_sheet('sheetname', 0) # 新規作成(0番目に配置)ws = wb.copy_worksheet('sheetname') # 既存からコピー# Cell を取得cell = ws['A1'] # A1方式cell = ws.cell(1, 1) # R1C1方式# Cell の値を取得val = cell.value# Cell に値を代入cell.value = valws.cell(1, 1, val) # R1C1方式なら指定と同時に代入可# Cell に関数を代入cell.value = '=SUM(A1:B2)' # そのまま文字列で |
スタイル
見栄えに関する指定の多くは、単一セルに対して個々におこなうことになる。
追加でopenpyxl.stylesをインポート。
1 2 |
import openpyxlimport openpyxl.styles # ←これが必要 |
Alignment(文字の中央揃えなど)
1 2 3 4 |
hcentering = openpyxl.styles.Alignment(horizontal='center')vcentering = openpyxl.styles.Alignment(vertical='center')cell.alignment = hcentering |
他にも、テキストを折り返すか(wrapText)、最終行を均等割り付けにするか(justifyLastLine)、などを指定できる。
背景色
1 2 3 |
orange_fill = openpyxl.styles.PatternFill(patternType='solid', fgColor='FDE9D9')cell.fill = orange_fill |
罫線
あるセル範囲の周囲だけに罫線を引く、みたいなことはできず、セル毎に上下左右に罫線を引くかどうかのスタイルを指定するため、ちょっと面倒。
1 2 3 4 5 6 |
# 線のスタイルbd_style = openpyxl.styles.Side(style=openpyxl.styles.borders.BORDER_THIN, color='000000')# セルの上下左右の線の配置bd_o = openpyxl.styles.Border(top=bd_style, bottom=bd_style, left=bd_style, right=bd_style)# セルに適用cell.border = bd_o |
関数化すればよいが、関数自体が野暮ったくなる感は否めない。
列幅・カラム幅
これはセルで無くシートに対して操作する。数値がどれくらいの幅を示すのかちとわかりづらい。(さらに列と行で単位が異なるっぽい)
1 2 |
ws.row_dimensions[1].height = 12ws.column_dimensions['A'].width = 12 |
表示形式
これはセルの属性に直接文字列を指定すればよい。
1 |
cell.number_format = '0.000%;[Red]-0.000%' |

