本記事は以前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:F10
1行上、2列右に移動して、既存のセルを上書きします。
参考文献
https://openpyxl.readthedocs.io/en/stable/
https://pg-chain.com/python-excel-border