ここではExcel操作ライブラリであるOpenPyXLを用いたExcelファイルの読み込みに関連する機能について触れています。
ブックのオープン
まずはExcelブックの開いてみましょう。Excelであればどのようなファイルでも構いませんが、例で使用しているファイルは下記リンクよりダウンロード出来ます。
import openpyxl book = openpyxl.load_workbook('test_book.xlsx')
openpyxlモジュールをインポート後、load_workbookを使用してブックを開きます。 引数にはファイル名を指定しましょう。
シート数・シート名の取得
ブック内のシート数と全シート名を出力してみましょう。
import openpyxl book = openpyxl.load_workbook('test_book.xlsx') print('--------------------------------') print(len(book.sheetnames)) print('--------------------------------') for name in book.get_sheet_names(): print(name)
-------------------------------- 3 -------------------------------- テストシート1 テストシート2 テストシート3
5行目のbook.sheetnamesに対し、lenを用いてシート数を取得出来ます。8行目get_sheet_namesはブック内の全シート名の取得が可能です。
指定のシートを取得
ブック内の特定のシートを取得する例です。次の例ではtitleでそれぞれのシート名を取得しています。
import openpyxl book = openpyxl.load_workbook('test_book.xlsx') print(book.active.title) print(book.worksheets[1].title) print(book['テストシート3'].title) print(book.get_sheet_by_name('テストシート3').title)
テストシート1 テストシート2 テストシート3 テストシート3
activeにはブック内において現在選択されているシート(アクティブなシート)が格納されています。例では最初のシートです。worksheetsはブック内の全シートが格納されており、例のようにインデックスで特定のシートを取得することができます。シート名で取得する場合は7、8行目のような方法となります。
シート内の列数・行数取得
特定のシート内に存在する列数と行数を取得します。
import openpyxl book = openpyxl.load_workbook('test_book.xlsx') active_sheet = book.active print(active_sheet.max_column) print(active_sheet.max_row)
3 10
max_columnで(シート内での最大)列数、max_rowで(シート内での最大)行数を取得出来ます。
セル値の取得
シート内のセル値を取得するには、cellの引数に列と行を渡します。開始値は0ではなく1なので注意してください(列1、行1の指定で最も左上のセル「A1」を取得)。またExcelでセルを指定する‘<列><行>’のような形式でも取得することができます(例では「B2」)。
import openpyxl book = openpyxl.load_workbook('test_book.xlsx') active_sheet = book.active print(active_sheet.cell(column=1, row=1).value) print(active_sheet['B2'].value)
テストセルA1 テストセルB2
列ベースですべてのセル値を取得する場合は次のようにシートのcolumnsを用います。
import openpyxl book = openpyxl.load_workbook('test_book.xlsx') active_sheet = book.active for column in active_sheet.columns: print('----------------------------') for cell in column: print(cell.value)
---------------------------- テストセルA1 テストセルA2 テストセルA3 テストセルA4 テストセルA5 テストセルA6 テストセルA7 テストセルA8 テストセルA9 テストセルA10 ---------------------------- テストセルB1 ~中略~ テストセルC9 テストセルC10
行ベースですべてのセル値を取得する場合は次のようにシートのrowsを用います。
import openpyxl book = openpyxl.load_workbook('test_book.xlsx') active_sheet = book.active for row in active_sheet.rows: print('----------------------------') for cell in row: print(cell.value)
---------------------------- テストセルA1 テストセルB1 テストセルC1 ---------------------------- テストセルA2 テストセルB2 テストセルC2 ---------------------------- テストセルA3 テストセルB3 テストセルC3 ---------------------------- ~中略~ テストセルB10 テストセルC10