Edited at

pythonのopenpyxlの使い方メモ

More than 1 year has passed since last update.

pythonでExcel(xlsx)を作成・編集・読み込みができるモジュールである openpyxl の使い方メモです。


OpenPyXLドキュメント

http://openpyxl.readthedocs.io/en/stable/


Excelファイル作成


Excelファイルを作成する

空のExcelファイルを作成します。

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
Excelファイル(xlsx)を作るだけ
`example.xlsx` が実行したカレントにできる
"""

wb = openpyxl.Workbook()

# 保存
wb.save('example.xlsx')


標準WS名を変更

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
`example.xlsx` に作成するWS名を設定
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `Sheet` だが変更する場合は `title` で変更する
ws.title = "WorkSheetTitle"

# 保存
wb.save('example.xlsx')


複数WSを作成

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
WorkSheetを複数作成する
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `Sheet` だが変更する場合は `title` で変更する
ws.title = "WorkSheetTitle"

# 2つめのWSを定義
ws2 = wb.create_sheet("NewWorkSheet2")

# 3つめのWSを定義してポジションを設定する
# `0` だと一番先頭
ws3 = wb.create_sheet("NewWorkSheet3", 0)

# 保存
wb.save('example.xlsx')


WSタブのカラーを変更

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
WSタブのカラーを変更
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `Sheet` だが変更する場合は `title` で変更する
ws.title = "WorkSheetTitle"

# WSのtabカラーを設定する
ws.sheet_properties.tabColor = "1072BA"

# 保存
wb.save('example.xlsx')


セルに値を入れる


座標を指定

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
セルに値を入れる
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `Sheet` だが変更する場合は `title` で変更する
ws.title = "WorkSheetTitle"

# セルに値を入れる
ws["A1"] = "HOGE"
ws["B1"] = "FUGA"

# 保存
wb.save('example.xlsx')


行列表記

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
セルに値を入れる
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `Sheet` だが変更する場合は `title` で変更する
ws.title = "WorkSheetTitle"

# 行列表記でセルに値を入れる
ws.cell(row=4, column=2, value=10)

# 保存
wb.save('example.xlsx')


行列表記2

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
セルに値を入れる
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `sheet` だが変更する場合は `title` で変更する
ws.title = "worksheettitle"

# 行列表記でセルに値を入れる
v = 0
for i in range(1,10):
for n in range(1,10):
ws.cell(row=i, column=n, value=v)
v += 1

# 保存
wb.save('example.xlsx')


範囲指定

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
セルに値を入れる
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `sheet` だが変更する場合は `title` で変更する
ws.title = "worksheettitle"

# 行列表記でセルに値を入れる
v = 0
for i in range(1,10):
for n in range(1,10):
ws.cell(row=i, column=n, value=v)
v += 1

# 保存
wb.save('example.xlsx')


行を一度に出力

#!/usr/bin/env python3

import openpyxl

# カラム名
column_title = ["FirstName", "LastName"]

if __name__ == '__main__':
"""
セルに値を入れる
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `sheet` だが変更する場合は `title` で変更する
ws.title = "worksheettitle"

# カラム名と値をセットして順番にセルへ値を入れる
rows = [
column_title,
["Tarou", "Tanaka"],
["Tarou", "Suzuki"],
["Tarou", "Uchiayama"],
]
for row in rows:
ws.append(row)

# 保存
wb.save('example.xlsx')


セル内改行

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
セル内の改行
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `Sheet` だが変更する場合は `title` で変更する
ws.title = "WorkSheetTitle"

# セル内改行
ws['A1'] = "A\nB\nC"
ws['A1'].alignment = openpyxl.styles.Alignment(wrapText=True)

# 保存
wb.save('example.xlsx')


セルのスタイル設定

スタイルドキュメント

https://openpyxl.readthedocs.io/en/default/styles.html#cell-styles-and-named-styles


フォント設定

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
セルのスタイル変更
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `sheet` だが変更する場合は `title` で変更する
ws.title = "worksheettitle"

# フォントの設定
font = openpyxl.styles.Font(
name = "HGPゴシックE",
size = 15,
)
a1 = ws["A1"]
a1.font = font
a1.value = "TEST"

# 保存
wb.save('example.xlsx')


セルの枠線

#!/usr/bin/env python3

import openpyxl
from openpyxl.styles import Border, Side

if __name__ == '__main__':
"""
セルのスタイル変更
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `sheet` だが変更する場合は `title` で変更する
ws.title = "worksheettitle"

# セルの枠線
border = Border(
left=Side(
border_style="thin",
color="FF0000"
),
right=Side(
border_style="thin",
color="FF0000"
),
top=Side(
border_style="thin",
color="FF0000"
),
bottom=Side(
border_style="thin",
color="FF0000"

)
)
b2 = ws["B2"]
b2.border = border
b2.value = "TEST"

# 保存
wb.save('example.xlsx')


セルの結合

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
セルのスタイル変更
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `sheet` だが変更する場合は `title` で変更する
ws.title = "worksheettitle"

# セルの結合
ws.merge_cells("A1:E1")
ws["A1"] = "HOGE"

# 保存
wb.save('example.xlsx')


セルの塗りつぶし

#!/usr/bin/env python3

import openpyxl
from openpyxl.styles import PatternFill

if __name__ == '__main__':
"""
セルのスタイル変更
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `sheet` だが変更する場合は `title` で変更する
ws.title = "worksheettitle"

# セルの塗りつぶし
fill = PatternFill(fill_type='solid',
fgColor='FFFF0000')
b2 = ws["B2"]
b2.fill = fill
b2.value = "TEST"

# 保存
wb.save('example.xlsx')


ハイパーリンク

#!/usr/bin/env python3

import openpyxl

if __name__ == '__main__':
"""
セルのスタイル変更
"""

wb = openpyxl.Workbook()
ws = wb.active

# 標準だと `sheet` だが変更する場合は `title` で変更する
ws.title = "worksheettitle"

# 2つ目のWSを作成
ws2 = wb.create_sheet("example")

# ハイパーリンク設定
ws["A1"] = "Link"
ws["A1"].hyperlink = "example.xlsx#example!A1"

# 保存
wb.save('example.xlsx')


Excelファイル読込


Excelファイルを読込む


#!/usr/bin/env python3
from openpyxl import Workbook, load_workbook

wb = load_workbook('./example.xlsx')
ws = wb.active

for row in ws:
for cell in row:
print(cell)