【Python】Excel読み込み方法(openpyxl)
今回はPythonでExcelを読み込む方法について解説します。
Excel読み込むためのライブラリはいくつかあるのですが、使い勝手の良いopenpyxlでのやり方を紹介します。
この記事では↓の内容が分かります。
- openpyxlのインストール方法
- Excel読み込み方法
- セルの値を読み込む方法
- セルに値を書き込む方法
openpyxlのインストール方法
まずはopenpyxlをインストールします。
ターミナルやコマンドプロンプトで、↓のコマンドを実行すればインストールできます。
pip install openpyxl
Excel読み込み方法(openpyxl)
import openpyxl
from openpyxl import load_workbook
# Excelファイルを開く
wb = load_workbook(r'ファイルのパス/ファイル名.xlsx')
# シートを選択
ws = wb['シート名']
openpyxlでExcelファイルを読み込むには、サンプルコードのように記載します。
load_workbookメソッドでExcelファイルを開き、シート名でシートオブジェクトを取得します。
ファイルのパスは基本的にr文字列で指定しましょう。エスケープの関係でエラーになりやすいです。(詳細は下記をご覧ください)
ws = wb.worksheets[0] # 0は最初のシート
シートはシート名だけでなく、インデックス番号で指定することもできます。
これでExcelファイルのシートの読み込みまで完了です。
ここからは以下のセル操作について説明します。
- セルの値を読み込む方法
- セルに値を書き込む方法
セルの値を読み込む方法
import openpyxl
from openpyxl import load_workbook
# Excelファイルを開く
wb = load_workbook('ファイルのパス/ファイル名.xlsx')
# シートを選択
ws = wb['シート名']
# セルの値を読み込む
cell_value = ws.cell(row = 1, column = 1).value
print(cell_value) # A1セルの値
セルの値を読み込むにはws.cellでセルオブジェクトを取得した後、valueを使います。
サンプルコードではA1セルの値を読み込んでいます。
# セルの値を取得
cell_value = ws['A1'].value
print(cell_value) # A1セルの値
このように文字列でセルオブジェクトを取得することもできます。
行単位で値を読み込む方法
import openpyxl
from openpyxl import load_workbook
# Excelファイルを開く
wb = load_workbook('ファイルのパス/ファイル名.xlsx')
# シートを選択
ws = wb['シート名']
# values_only=Trueとするとcell型でなく、値型になる
for row in ws.iter_rows(values_only=True):
print(row) # 行データがタプルで得られる
行単位で値を読み込むにはiter_rowsメソッドを使います。
このメソッドを使うと、行を1行ずつ処理することができます。
値を読み込みたい場合はこのメソッドの引数values_only=Trueを設定します。
(この引数を設定しないとセル型のタプルでデータが返されるので、処理するのに一手間必要です)
for文で1行ずつ読み込むと、1行分のデータがタプル形式で得られます。
この方法で1行ずつデータを読み込んでいきましょう。
セルに値を書き込む方法
import openpyxl
from openpyxl import load_workbook
# Excelファイルを開く
wb = load_workbook('ファイルのパス/ファイル名.xlsx')
# シートを選択
ws = wb['シート名']
# セルに値を書き込む
ws.cell(row = 1, column = 1, value = 'A1')
# Excelファイルを保存
wb.save(r'ファイルのパス/ファイル名.xlsx')
セルに値を書き込む場合は、ws.cellのvalue引数に値を設定します。
サンプルコードではA1セルに’A1’を書き込んでいます。
Excelファイルを編集するには最後にファイル保存が必要になります。
wb.saveメソッドを使うのですが、開いたときと同じファイルパスを指定すると上書き保存されます。
行単位で値を書き込む方法
import openpyxl
from openpyxl import load_workbook
# Excelファイルを開く
wb = load_workbook('ファイルのパス/ファイル名.xlsx')
# シートを選択
ws = wb['シート名']
# 追加する行のリスト
row_values = ['A1', 'A2', 'A3']
# 行を追加する
ws.append(row_values)
# Excelファイルを保存
wb.save(r'ファイルのパス/ファイル名.xlsx')
セル単位でなく、行単位で値を書き込むにはappendメソッドを使います。
appendメソッドの引数にlistを渡すと、シートの末尾にlistの中身が追加されます。