PythonでExcelファイルを読み込み、編集して書き込む【OpenPyXL】
こんなこと、やります。
- PythonでExcelのセルへ書き込み
- PythonでExcelのセルを読み込み
- OpenPyXLの基本的な使い方を解説
はじめに
OpenPyXlとは
OpenPyXLとは、PythonでExcelファイルの読み書きを可能にしてくれるライブラリです。 OpenPyXLを使えば、とても手軽に簡単にExcelデータをPythonで扱えるようになります。Excelマクロや関数が苦手な方でも、Pythonが得意であればOpenPyXLを使うと作業効率がアップします。何より好きなエディタを使ってプログラミングできるのは楽しいですよ。Visual Studio Codeでも、PyCharmでも、お好きなエディタをお使いください (^_^)
OpenPyXLのおすすめ書籍
こちらの「PythonでExcel、メール、Webを自動化する本」では、openpyxlによるブック、シートのデータのマージ処理などのサンプルコードが詳しく書かれてます。
OpenPyXLのインストール
本記事のプログラムは、macOSで動かし、Python3を使っていきます。
まずは、pip3を使ってopenpyxlをインストールします。
$ pip3 install openpyxl
OpenPyXLの公式チュートリアルはこちら。 Tutorial — openpyxl 3.0.5 documentation
Pythonで表データを扱うには、pandasというライブラリもあります。pandasの使い方は Excelなどの表データをゴリゴリ加工する【Python x Pandas】 に書きました。
OpenPyXLでExcelファイルを読み込む
それではまず、OpenPyXLを使ってPythonからExcelファイルのデータを読み込んでみます。ライブラリを使う時は import openpyxl で読み込んでおきます。
ファイル名をitems.xlsxとし、次の画像のようなデータのExcelファイルを用意しました。
Excelファイル(.xlsx)を読み込む
次の関数でExcelファイル(.xlsx)を読み込み、Excelデータを辞書化します。
wb = openpyxl.load_workbook("items.xlsx")
ワークシートを選択する
ワークシートを選択するには、辞書配列のキーにワークシート名を入れます。
ws = wb["alink"]
セルの値を取得する
セルにアクセスするには次のようにして、1行1行ループを回し、列を指定して値を取り出します。
for row in ws.rows:
print(row[0].value)
print(row[1].value)
print(row[2].value)
数式の結果の値を読み込む
ここまで紹介したプログラムでは、セルに数式が入っていると数式そのものをデータとして取得してしまいます。数式の計算結果をデータとして取得したい場合は、 data_only=True を指定します。
wb = openpyxl.load_workbook("items.xlsx", data_only=True)
Excelファイルを読み込む
ここで、Excelファイルを読み込む一連の流れのプログラム例を紹介します。OpenPyXLを使うことで、次のように簡単にExcelデータへアクセスできます。
items = {}
path = "items.xlsx"
wb = openpyxl.load_workbook(path)
ws = wb["alink"]
for row in ws.rows:
items[row[0].value] = {'Title': row[1].value, 'URL': row[2].value}
OpenPyXLでExcelファイルへ書き込む
OpenPyXLでExcelファイルの読み込みを紹介してきました。今度は、OpenPyXLでExcelファイルへ書き込む方法をご紹介します。
Excelファイルの新規作成する
次の関数で、Excelファイルを新規に作成できます。
wb = openpyxl.Workbook()
Excelファイルの保存する
新規作成したExcelファイルを、ファイル名を付けて保存します。
wb.save("sample.xlsx")
シートを追加する
Excelオブジェクトにシート名を付けてシートを追加します。
ws = wb.create_sheet(title="Hello")
セルにデータを書き込む
シートのセルにデータを書き込みます。次のようにして、セル番号を指定し、値を設定します。
c1 = ws.cell(row=1, column=1)
c1.value = "Hello world!"
Excelファイルに書き込む
Excelファイルに書き込むプログラム例を紹介します。プログラムを実行すると「Hello」の名前のシートが追加され、そこへリストで指定した文字が書き込まれます。
def write():
wb = openpyxl.Workbook()
ws = wb.create_sheet(title='Hello')
list = ['hoge', 'huga', 'pico']
for i, data in enumerate(list):
row = i + 1
c = ws.cell(row=row, column=1)
c.value = data
wb.save("sample.xlsx")
以上、OpenPyXLの簡単な使い方を説明しました。OpenPyXLでは、数式を追加したり、色を操作できたり色々な機能が存在します。詳しくは 公式ドキュメント や書籍をご覧ください。