列の文字と番号を相互変換する
通常、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 ------- '''
コメント