この記事では、Pythonで.xlsx
形式のExcelファイルを操作するためのライブラリopenpyxl
を使い、Excelブックを開いてシートやセルのデータを読み込む基本的な方法について解説します。
1. 準備:openpyxl
のインストールとサンプルExcelファイル
openpyxl
はサードパーティ製のライブラリなので、使用する前にインストールが必要です。
pip install openpyxl
この記事のコードを試すために、sample.xlsx
という名前のExcelファイルを作成し、Sheet1
に以下のデータを入力してください。
A | B | C | |
1 | Name | Subject | Score |
2 | Taro | Math | 85 |
3 | Hanako | English | 92 |
4 | Kenji | Science | 78 |
2. Excelブックを開き、シートを取得する
まず、openpyxl.load_workbook()
関数でExcelファイル(ワークブックオブジェクト)を開きます。
import openpyxl
# Excelワークブックを読み込む
workbook = openpyxl.load_workbook("sample.xlsx")
print(f"ワークブックの型: {type(workbook)}")
ワークブック内のシートには、以下の方法でアクセスできます。 wb.sheetnames
: すべてのシート名をリストとして取得します。(古いget_sheet_names()
は非推奨) wb['シート名']
: シート名で特定のシートオブジェクトを取得します。(古いget_sheet_by_name()
は非推奨) wb.active
: 現在アクティブなシートを取得します。
# すべてのシート名を表示
print(f"シート名の一覧: {workbook.sheetnames}")
# 'Sheet1'という名前のシートを取得
sheet = workbook['Sheet1']
print(f"現在のシートのタイトル: {sheet.title}")
3. シートからセルを読み取る
シートオブジェクトから個々のセルにアクセスし、その値を取得するにはいくつかの方法があります。
座標でアクセスする 'A1'
のような座標の文字列を使って、直接セルオブジェクトにアクセスできます。セルの値は.value
属性で取得します。
cell_a1 = sheet['A1']
print(f"セルA1の値: {cell_a1.value}")
cell_b2 = sheet['B2']
print(f"行 {cell_b2.row}, 列 {cell_b2.column} の値は 「{cell_b2.value}」 です。")
print(f"セル {cell_b2.coordinate} の値は 「{cell_b2.value}」 です。")
cell()
メソッドでアクセスする sheet.cell(row=行番号, column=列番号)
の形式でもセルを取得できます。行と列の番号は1
から始まります。
# 1行目、2列目のセル(B1)の値を取得
cell_b1_value = sheet.cell(row=1, column=2).value
print(f"B1の値: {cell_b1_value}")
# シートの最大行・最大列を取得
print(f"最大行: {sheet.max_row}")
print(f"最大列: {sheet.max_column}")
4. 複数のセル(範囲)を一度に読み取る
シートのスライス機能を使うと、矩形領域のセルを一度に取得できます。
# A1からC3までのセル範囲を取得
cell_range = sheet['A1':'C3']
for row_of_cells in cell_range:
for cell in row_of_cells:
print(f"{cell.coordinate}: {cell.value}", end=" | ")
print()
実行結果:
A1: Name | B1: Subject | C1: Score |
A2: Taro | B2: Math | C2: 85 |
A3: Hanako | B3: English | C3: 92 |
また、sheet.iter_rows()
やsheet.iter_cols()
を使うと、行ごとや列ごとにセルを効率的に処理できます。
5. ユーティリティ関数(列文字と番号の変換)
openpyxl.utils
モジュールには、列番号(1
, 2
…)と列文字('A'
, 'B'
…)を相互に変換する便利な関数が含まれています。
from openpyxl.utils import get_column_letter, column_index_from_string
# 番号から文字へ
print(f"1番目の列: {get_column_letter(1)}") # 出力: A
print(f"27番目の列: {get_column_letter(27)}") # 出力: AA
# 文字から番号へ
print(f"列 'B': {column_index_from_string('B')}") # 出力: 2
print(f"列 'AB': {column_index_from_string('AB')}") # 出力: 28
まとめ
openpyxl
ライブラリは、Excelファイルの読み込みを自動化するための強力なツールです。load_workbook
でファイルを開き、wb['シート名']
でシートにアクセスし、sheet['A1']
やsheet.cell()
で個々のセルの値を読み取ることが基本操作となります。これらの機能を組み合わせることで、Excelシート上のデータを効率的に処理することが可能です。