Pythonのopenpyxlモジュールを使ってエクセル操作【4時間目:もっとセル操作】

スポンサーリンク

列の文字と番号を相互変換する

通常、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
-------
'''

次は「pythonのopenpyxlモジュールを使ってエクセル操作【5時間目:rows, columns】」です。

コメント

タイトルとURLをコピーしました