本記事は以前Qiita に投稿した内容を本ブログに持ってきています。

概要

業務でPythonを使ってExcelを作成することがあったので、備忘録としてこの記事を作成しました。
実行環境はPython 3.7で、OpenPyXLを利用してExcelを作成します。

作成・保存・読み込み

新規にExcel作成

from openpyxl import Workbook

wb = Workbook()

Excel保存

wb.save('test.xlsx')

save()にはエクセルを保存したいpath(ディレクトリとファイル名)を指定してください。

アクティブなシート取得

ws = wb.active

シート作成

ws2 = wb.create_sheet("Sheet2")
ws3 = wb.create_sheet("sheet3", 0)  # 最初のシートに設定
ws4 = wb.create_sheet("sheet4", -1)  # 最後から2番目にシートに設定

Excel読み込み

from openpyxl import load_workbook

load_workbook('test.xlsx')

シート編集

シートのタイトル命名

ws.title = "test-sheet"

セルに文字入力

ws['A1'] = "hogehoge"

['A1']の部分に指定したいセルを入力

数式を使う

ws['A1'] = "=SUM(1, 1)"

セルの結合

ws.merge_cells('A2:D2')

セルの結合解除

ws.unmerge_cells('A2:D2')

セルの色付け

from openpyxl.styles import PatternFill

fill = PatternFill(patternType='solid', fgColor='4d4d4d')
ws['A1'].fill = fill

patternTypeはセルの塗り方、fgcolorはセルに塗る色を指定しています。 色に関しては、以下サイトなどを参考にしてください。 https://www.color-sample.com/colors/4d4d4d/

文字に色付け

from openpyxl.styles.fonts import Font

ws['A1'].font = Font(color='FFFFFF')

列の幅を変更

ws.column_dimensions['A'].width = 15

セルに罫線を設定

from openpyxl.styles.borders import Border, Side

border = Border(top=Side(style='thin', color='000000'),
                        bottom=Side(style='thin', color='000000'),
                        left=Side(style='thin', color='000000'),
                        right=Side(style='thin', color='000000')
                        )

for row_num in range(1, 15):
            for col_num in range(1, 3):
                ws.cell(row=row_num, column=col_num).border = border
                ws.cell(row=row_num, column=col_num).alignment = Alignment(horizontal = 'left', vertical = 'top', wrap_text = False)

horizontalで水平方向を、verticalで垂直方向を何揃えにするかを指定しています。horizontal, verticalでは以下の定数を指定することができます。
horizontal

'center', 'centerContinuous', 'fill', 'left', 'justify', 'distributed', 'right', 'general'

vertical

'bottom', 'center', 'top', 'justify', 'distributed'

画像の挿入

from openpyxl.drawing.image import Image

img = Image('logo.png')
ws.add_image(img, 'A1')

行と列の挿入

ws.insert_rows(7)  # 既存の行7の前に行を挿入する
ws.insert_cols(7)  # 既存の列7の前に行を挿入する

行と列の削除

ws.delete_rows(6, 3)
ws.delete_cols(6, 3)

セルの移動

ws.move_range("D4:F10", rows=-1, cols=2)

範囲内のセルがD4:F101行上、2列右に移動して、既存のセルを上書きします。

参考文献

https://openpyxl.readthedocs.io/en/stable/
https://pg-chain.com/python-excel-border