PythonでExcelファイルの読み込みと操作(openpyxl)

PythonでExcelファイルを操作する(openpyxl)
スポンサーリンク
スポンサーリンク

PythonからExcelを操作するためのライブラリ「openpyxl」で、Excelファイルの読み込みを行い、操作する方法を解説します。

スポンサーリンク

使用ライブラリ

ライブラリ :openpyxl (公式ドキュメント
インストール:必要

外部ライブラリのopenpyxlを使うとPythonでExcelファイル(.xlsx)を読み書きすることができます。

ライブラリのインストールとインポート

コマンドプロンプトを起動してpipでopenpyxlライブラリをインストールします。

pipの使い方はこちらの記事を参照してください。
・関連記事:Pythonライブラリのインストール(pipの使い方)

 python -m pip install openpyxl

Successfully installed openpyxl-*.*.* と表示されればインストールは成功です。

インストールが完了したら openpyxl をインポートします。

openpyxlの使い方

openpyxl は、Excelファイル(xlsx/xlsm/xltx/xltm)の読み書きを行うためのライブラリです。

操作を行うためには、openpyxlのメソッドでワークブックを開き、どのシート、どのセルに操作を行うのかを指定する必要があります。

エクセルマクロの記述とよく似ている為、マクロを利用した事がある方はイメージが湧くと思います。

サンプルファイル

Excelファイルは以下のsample.xlsxを使用します。ファイルはpythonスクリプトファイルと同じフォルダに保存されているものとします。

サンプルファイル

ワークブックを操作する

ワークブックの新規作成、既存ブックの読み込み、保存操作が可能です。

ワークブックを新規作成

ブックを新規で作成するには wrokbook() メソッドを使用します。引数は不要です。

 openpyxl.workbook()

ワークブックを読み込む

既存のExcelファイルを読み込むには openpyxl.load_workbook() でExcelファイルのパスを指定します。

 openpyxl.load_workbook(ファイルパス)

ワークブックを保存する

ブックを保存するには save() メソッドを使用して、引数はファイルのパスを指定します。
上書き保存する場合は、読み込んだファイルと同名を指定します。

ワークブックを閉じる

ブックを閉じるには close() メソッドを使用します。

ワークシート操作

ワークシートの取得

ワークブックオブジェクトから[シート名]でワークシートオブジェクトを取得できます。

インデックス番号を指定して取得することもできます。インデックスは左端が0になります。

 ワークブックオブジェクト[シート名]


アクティブシートを選択するには active プロパティで選択できます。

ワークシート名を取得する

読み込んだワークブックのシート名を取得するには sheetnames プロパティを使用します。
結果はリストになります。
・関連記事:リスト(配列)

 ワークブックオブジェクト.sheetnames

ワークシートを追加する

ワークシートを追加するには create_sheet() メソッドで、引数に追加するシート名と追加位置を指定します。

 ワークシートオブジェクト.create_sheet(title=追加するシート名, index=追加位置のインデックス番号)

最後尾にシートを追加する場合は位置の指定は不要です。

位置を指定して追加する(第二引数で位置=インデックスを指定)

インデックスは先頭が0となり、最後尾に追加する場合は引数の省略可。

ワークシートをコピーする

ワークシートをコピーするには copy_worksheet() メソッドを使用します。引数でコピー元のワークシートを指定します。

コピーしたシート名は「元のシート名 Copy」となる。コピー先の位置の指定はできません。

 ワークシートオブジェクト.copy_worksheet(コピー元のワークシート)

ワークシートを削除する

ワークシートを削除するには remove() を使用します。引数にはコピー元のワークシートオブジェクトを指定します。複数のシートを一度に削除することはできません。

 ワークシートオブジェクト.remove(ワークシートオブジェクト)


シート名を指定して削除したい場合は del を使用します。

 del ワークシートオブジェクト[削除するシート名]

複数のワークシートを削除する

複数シートを削除するには、ブック内のシートをfor 文で一つずつ取り出して、削除したいシートのリストと照合し、マッチした場合は削除します。

ワークシート名を変更する

ワークシート名を変更するには、ワークシートオブジェクトの title プロパティを指定します。

 ワークシートオブジェクト.title = 変更後のワークシート名

ワークシートのインデックス番号を取得する

ワークシートのインデックス番号は index() メソッドで、ワークシートを引数に指定して取得します。

セル操作

セル値の取得

ワークシートオブジェクトから[’A1’]のようなセル指定文字列でセルオブジェクトを取得し、属性 value でセル値を取得できます。

セル値の取得
 ワークシートオブジェクト[セル番地]

cell() メソッドで行番号(row)、列番号(column)を指定して取得することも可能です。
行番号はExcelの行番号の数字をそのまま使い、列番号はA=1, B=2・・・と数値に読み換えて指定します。

 ワークシートオブジェクト.cell(row = 行番号, column = 列番号)

row=, column= は省略も可能です。

セルの位置

セル値の書き込み・削除

セルに値を書き込むには、セルオブジェクトの属性 value に値を設定します。
入力した値を実際のファイルに反映させるには、ワークブックを保存する必要があります。

 ワークシートオブジェクト[セル番地].value = 値
 ワークシートオブジェクト.cell(row = 行番号, column = 列番号).value = 値
 ワークシートオブジェクト.cell(row = 行番号, column = 列番号, value = 値)

値に 'None' を設定することで、セル値を削除する事が出来ます。

数式を書き込む

数式を書き込むには、数式の文字列を指定して書き込みます。

 セルオブジェクト.value = 数式の文字列

ワークブックを保存して開くと式が入力されて計算されている事が確認できます。

保存したファイルをopenpyxlで開き直して数式を入力したセルの値を取得しても、計算結果の数値を取得することはできません。これはopenpyxlが文字列をそのまま取得するようになっているためです。

計算結果を取得するには、一度手動でワークブックをエクセルアプリで開いて上書き保存する必要があります。その上で、openpyxlでブックを開く際に引数に data_only=True を指定することで取得できるようになります。(openpyxlに再計算させる手段は無いようです)

セルのアドレスを確認する

セルのアドレス(C1R1形式)は、セルオブジェクトの coordinate プロパティで取得できます。

 セルブジェクト.coordinate

行列番号、列名はセルオブジェクトの row, column, column_letter で取得できます。

 行番号
 セルオブジェクト.row
 列番号
 セルオブジェクト.column
 列名
 セルオブジェクト.column_letter

繰り返し処理

1シートずつ繰り返す

ワークブックオブジェクトをfor文で処理すると1シートずつ取得することができます。

1行ずつ繰り返す

sample.xlsxのsheet1 A1:D13のデータを1行ずつ読み込みます。
ワークシートオブジェクトの rows プロパティでシートの行を取得し、for文でループ処理することで1行ずつ読み込めます。

以下の例では読み込んだデータを1行ずつリストに追加しています。リストについては下記の記事を参照してください。
・関連記事:リスト

読み込む範囲を指定する場合には iter_rows() メソッドを利用します。
次の例ではヘッダーを飛ばして2行目から読み込みます。

1行目をスキップして読み込む

以下の例では2行目から10行目、2列目から3列目までを読み込みます。

読み込み範囲指定

全ワークシートのデータを取得する

シートの繰り返し処理と1行ずつの繰り返し処理を入れ子にします。

openpyxlを使ってExcelファイルを処理する方法を解説しました。

行の高さ・列幅設定

行の高さを変更する

row_dimensions[]で変更する行番号を指定します。

列の幅を変更する

column_dimensions[]で変更する列名を指定します。

配置設定

文字の配置を設定する:横位置

設定を行うためには、stylesパッケージのalignmentモジュールを読み込みます。

文字の配置を設定する:縦位置

文字を折り返して全体を表示

文字を縮小して全体を表示する

セルの書式設定

フォント設定

stylesパッケージのFontモジュールを読み込みます。

フォント設定で、複数のプロパティを設定したい場合は、1行で記載しないと最後の設定のみが有効になるため注意が必要です。
上記の場合はフォント色の設定のみ反映され、種類とサイズは初期値にリセットされます。

複数の設定を行いたい場合は以下のように記述します。

背景色の設定

stylesパッケージのPatternFillモジュールを読み込みます。

bgColorfgcolor を使用する場合です。bgColorだけでは背景色が正常に変更できない為、fgcolor もセットで指定する必要があります。

start_colorでも設定可能です。

・関連記事: pandasでExcelファイルの読み込み(read_excel)
・関連記事: pandasでExcelファイルの書き込み(to_excel)
・関連記事:VBAマクロからPythonを実行する(xlwings)