列の文字と番号を相互変換する
通常、Excelの列はA、B、C、D、E…というようにアルファベットで表現されます。これを番号に変換したり、番号を列のアルファベット表記に置き換えることができます。この相互変換には、以下の関数を使用します
- column_index_from_string() → 列のアルファベット表記から番号に変換する関数
- get_column_letter() → 番号から列のアルファベット表記に変換する関数
これらの関数を使うには、まずopenpyxlモジュールから「get_column_letter」と「column_index_from_string」をimportします。ただし、注意点として、openpyxlモジュールがバージョンアップした場合将来的にモジュール名が変わっている可能性がある点に注意してください
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
# Excelファイルを読み込みます
wb = openpyxl.load_workbook('example.xlsx')
# シートを指定します(ここでは'Sheet1'と仮定しています)
sheet = wb.get_sheet_by_name('Sheet1')
# シートの最大列を取得し、その列のアルファベット表記を出力します
print(get_column_letter(sheet.max_column)) # C
# 列のアルファベット表記を番号に変換して出力します
print(column_index_from_string('A')) # 1シートから複数の行と列を取得する
シートから複数の行と列を取得するには、openpyxlを使い、シートをスライスします。スライスした結果は、tuple(タプル)として表示されます。タプルは変更できないリストとして知られています。(リストのスライスに関しては「リストのスライス」を検索してください)
ポイントは、各行が順番にタプルに入っているということです。
以下は具体的なコード例です
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
# Excelファイルを読み込みます
wb = openpyxl.load_workbook('example.xlsx')
# シートを指定します(ここでは'Sheet1'と仮定しています)
sheet = wb.get_sheet_by_name('Sheet1')
# A1セルからC3セルまでをスライスし、タプルとして表示します
result = tuple(sheet['A1':'C3'])
print(result)上記のコードを実行すると、以下のような結果が得られます:
((<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>),
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>),
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>))forループで回すと各セルの値を表示できます。ポイントは外側のforループが行を、内側のforループが列を処理していることでしょうか。
for row_cell in sheet['A1':'C3']:
for cell in row_cell:
print(cell.coordinate, cell.value)
print('-------')
'''
A1 2015-04-05 13:34:02
B1 Apples
C1 73
-------
A2 2015-04-05 03:41:23
B2 Cherries
C2 85
-------
A3 2015-04-06 12:46:51
B3 Pears
C3 14
-------
'''


コメント