はじめに
PythonでのExcelファイル操作はpandasで大体できるが、書式指定の読み書き等細かい操作はopenpyxlの方が得意だったりする。この記事では、openpyxlのファイル読み書きから書式指定までの一連の操作をまとめる。
目次
前準備
openpyxlのライブラリをpipより取得する。openpyxlをimportする際、pxに別名設定(エイリアス)して使う。必須ではないが、この記事では以降、pxとして記述する。
openpyxl_example.py
import openpyxl as px
公式サイトはこちら
Excelファイル操作基本
Excelファイルの Open~Save/Close までの一連の操作方法は以下の通り。
操作 | コマンド |
---|---|
新規作成 | wb = px.Workbook() |
Open | wb = px.load_workbook( file_name ) |
Open(ReadOnly) | wb = px.load_workbook( file_name , read_only=True) |
Close | wb.close() |
Save | wb.save(file_name) Openと同じfile_nameであれば上書き。 |
アクティブSheet | ws = wb.active |
セル読み書き | cell=ws['A1'].value ws['A1'].value = cell |
openpyxl_example.py
import openpyxl as px
#新規作成=========================================
wb = px.Workbook()
#Activeなシート指定
ws = wb.active
#セルA:1に文字を書き込み
ws['A1'].value = 'あいうえお'
#Save保存
wb.save('openpyxl_test.xlsx')
#読み込み指定でOpen/Closeする===================
wb = px.load_workbook('openpyxl_test.xlsx',read_only=True)
#Activeなシート指定
ws = wb.active
#A:1のデータ読み出し
print(ws['A1'].value)
# あいうえお
#Close
wb.close()
シート操作
操作 | コマンド |
---|---|
Sheet一覧 | sheet_list = wb.sheetnames |
アクティブSheet | ws = wb.active |
Sheet指定 | ws = wb[ sheet_name ] |
Sheet追加 | wb.create_sheet(sheet_name, index=0) indexで挿入場所指定0は先頭 |
Sheet削除 | wb.remove(wb[ sheet_name ]) |
Sheet移動 | wb.move_sheet(sheet_name, offset=0) offsetで移動場所指定0は先頭 |
Sheet名変更 | ws.title = sheet_name |
Sheetコピー | wb.copy_worksheet(wb[sheet_name]) |
openpyxl_example.py
import openpyxl as px
#新規作成
wb = px.Workbook()
#シート追加---
wb.create_sheet('test_1', index=0) #先頭に'test_1'追加
wb.create_sheet('test_2', index=0) #先頭に'test_2'追加
wb.create_sheet('test_A') #最後に'test_A'追加
print(wb.sheetnames)
# ['test_2', 'test_1', 'Sheet', 'test_A']
#シート削除---
wb.remove(wb['test_2']) #'test_2'削除
print(wb.sheetnames)
# ['test_1', 'Sheet', 'test_A']
#シート移動---
#逆順
sheet_list=wb.sheetnames
sheet_list=sheet_list[::-1]
#シート移動
for i, sheet in enumerate(sheet_list):
wb.move_sheet(sheet, offset=i)
print(wb.sheetnames)
# ['test_A', 'Sheet', 'test_1']
#シート名変更---
ws = wb['Sheet']
ws.title ='modify_sheet'
print(wb.sheetnames)
# ['test_A', 'modify_sheet', 'test_1']
#Save保存
wb.save('openpyxl_test.xlsx')
セル操作
操作 | コマンド |
---|---|
セル指定 | cell = ws['B1'] cell = ws.cell(1,2) #ws.cell(行,列) |
行最大数 | ws.max_row |
列最大数 | ws.max_column |
行指定 | cell_tuple=ws['1'] |
列指定 | cell_tupple=ws['A'] |
範囲指定 | cell_tuple=ws['A1':'D11'] |
openpyxl_example.py
import openpyxl as px
wb = px.load_workbook('openpyxl_example.xlsx')
ws = wb['example_1']
#読み出し単セル
cell = ws['A1']
print(cell.value)
# アルファベット
cell = ws.cell(2,1) #ws.cell(行,列)
print(cell.value)
# a
#行最大数
print(ws.max_row)
# 11
#列最大数
print(ws.max_column)
# 4
#列指定(A列)
cell_tupple=ws['A']
colmun_list=[]
for cell in cell_tupple:
if cell.value is None: #セル空白判定
break
else:
colmun_list.append(cell.value)
print(colmun_list)
# ['アルファベット', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
#行指定(1行)
cell_tuple=ws['1']
row_list=[]
for cell in cell_tuple:
if cell.value is None: #セル空白判定
break
else:
row_list.append(cell.value)
print(row_list)
# ['アルファベット', 'ひらがな', '整数', '小数']
#複数セル指定
wb.create_sheet('example_2')
ws2=wb['example_2']
cell_tuple=ws['A1':'D11']
for i, column in enumerate(cell_tuple):
for j, cell in enumerate(column):
if cell.value is None: #セル空白判定
break
else:
# 'example_1'の内容を'example_2'へ複製する
ws2.cell(i+1,j+1).value = cell.value
#Save保存
wb.save('openpyxl_example.xlsx')
書式付き処理
フォント
from openpyxl.styles import Font
でフォントのライブラリをコールする。
Font(各種パラメータ)
で書式を選択し、.font
でセルへ設定する。各種パラメータは下記の通り。
操作 | パラメータ |
---|---|
フォント | name=#フォント名 |
文字色 | color='00FF0000' #カラーコード |
サイズ | size=2 |
太字 | bold=True |
斜体 | italic=True |
取り消し線 | strike=True |
下線 | underline ='single' |
openpyxl_example.py
import openpyxl as px
from openpyxl.styles import Font
wb = px.load_workbook('openpyxl_example.xlsx')
ws = wb['example_1']
font1 = Font(color='00FF0000', size=18 ,underline='single', bold=True, name='HGSゴシックE')
ws['A1'].font = font1
#Save保存
wb.save('openpyxl_example.xlsx')
セル色
from openpyxl.styles import PatternFill
でセル色のライブラリをコールする。
PatternFill(patternType='solid', fgColor='カラーコード')
で色設定をし、.fill
でセルへ設定する。
openpyxl_example.py
import openpyxl as px
from openpyxl.styles import PatternFill
wb = px.load_workbook('openpyxl_example.xlsx')
ws = wb['example_1']
fill_type = PatternFill(patternType='solid', fgColor='0000FFFF')
ws['A1'].fill = fill_type
#Save保存
wb.save('openpyxl_example.xlsx')