3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OpenPyXLでExcelファイル読み書き。

Last updated at Posted at 2023-10-28

はじめに

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.xlsx
image.png

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'

image.png

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でセルへ設定する。

image.png

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')

戻る

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?