Python

【PythonでExcelファイルを操作】OpenPyXLで読み書きかんたん!(サンプルコードあり)

【PR】この記事には広告を含む場合があります。

Excel file with Laptop

「PythonでExcelをサクッと読み書きできれば、作業がもっとラクになるのにな~」って思いませんか?

実はPythonにはExcelファイルを扱うためのライブラリがあります。「OpenPyXL」です。

この「OpenPyXL」というライブラリを使うとかんたんにExcelファイルを読み書きできるんです!


この記事では、PythonでExcelファイルを読み書きする基本操作を、超わかりやすく解説しています。

  • OpenPyXLライブラリのインストール方法
  • Excelファイルを読み書きする方法
  • Excelファイル名に、日付を付けて保存する方法


具体的なサンプルコードを交えながら段階的に説明していきますので、OpenPyXLがはじめてでも、あっという間にExcelファイルを操作できるようになると思います。

また、専門用語が出てきた場合には、補足説明を加えて理解しやすくしています。さらに、コードの解説では初心者が間違えやすい点や注意点もしっかりと補足しているので、安心してください。


PythonでExcelファイルを扱うなら、OpenPyXLライブラリは必須です。わかりやすく解説していますので、ぜひ最後まで読んでみてください。


OpenPyXLライブラリの概要とインストール

OpenPyXLライブラリは、Excelファイルを扱うためのライブラリ

公式サイト:https://openpyxl.readthedocs.io/


OpenPyXLとは、PythonでExcelファイルを扱うためのライブラリです。

このOpenPyXLを使うと、Excelファイルの読み込みや書き込みをかんたんに行うことができます。


ライブラリ」とは、Pythonで特定の機能を提供するプログラムの集まりです。インターネットからダウンロードしてインストールすることができます。


OpenPyXLの特徴

OpenPyXLの特徴は以下のとおり。

OpenPyXLの特徴(3つ)

  • Excelファイルを直接読み書きできる
    別のライブラリやソフトウェアに依存せず、xlsx形式のExcelファイルのセルやシートを直接操作できる。
    (補足)pandasライブラリは、セルを直接読み書きすることはできない。
  • Excelの機能をPythonで使える
    たとえば、セルの書式設定や数式、チャート、画像などを操作できる。
  • ドキュメントが充実している
    公式サイト(https://openpyxl.readthedocs.io/)には、インストール方法や基本的な使い方、サンプルコードなどが豊富に紹介されている。

上記のように、OpenPyXLはPythonでExcelファイルを扱える非常に便利なライブラリです。初心者から上級者まで、幅広いユーザーに使われています。


OpenPyXLのインストール方法

OpenPyXLは、Pythonの標準ライブラリではないため、インストールが必要です。

OpenPyXLがインストール済みで、アップデートをする場合は、「【OpenPyXL】アップデート方法」をご覧ください。


インストールはPythonの「pip」コマンドを使えばかんたんです。PCでターミナルを起動して、以下のコマンドを実行すればOKです。

コマンド


pip3 install openpyxl

実行結果の例

以下は、インストールの実行結果の例です。

Collecting openpyxl
Downloading openpyxl-3.0.9-py2.py3-none-any.whl (242 kB)
|████████████████████████████████| 242 kB 1.2 MB/s
Collecting et-xmlfile
Downloading et_xmlfile-1.1.0-py3-none-any.whl (4.7 kB)
Installing collected packages: et-xmlfile, openpyxl
Successfully installed et-xmlfile-1.1.0 openpyxl-3.0.9

Successfully」と表示されたら、インストール成功です。これでPythonでOpenPyXLを使う準備ができました。


テスト用のExcelファイルを準備する

ここでは、OpenPyXLを使ってExcelファイルを読み書きするために、テスト用のExcelファイルを作ります。

もし使えそうなExcelファイルが手元にあれば、そのExcelを使ってもOKです。


テスト用のExcelファイル

テスト用のExcelファイルは、以下のような5行x3列の表です。

NAMEAgeGender
Yamada25man
Suzuki24woman
Tanaka30man
Ito20woman
Morita22woman
(test.xlsx)

テスト用Excelファイルを作る手順は、

  • 上記の表をマウスでドラッグして、全選択する
  • Ctrl+Cでコピーする
  • 空のExcelファイルに、Ctrl+Vで貼り付けて、保存する

です。

Excelファイル名は、「test.xlsx」としています。

Excelファイルを用意できたら、次のステップに進みましょう。


OpenPyXLで、Excelのセルを指定する2つ方法

OpenPyXLでは、Excelのどの「セル」を読み書きするか、セルの指定方法は2通りあります。

1つは、「セル番号」で指定する方法。もう一つは、「行」と「列」で指定する方法方です。

セルの指定方法コードの書き方の例
セル番号」でセルを指定する['B3'].value
」(row)と「」(column)でセルを指定するcell(row=3, column=2).value


上記2つの例は、コードの書き方は違いますが、2つとも「B3」セルを指しています。

どちらのコードで書いてもOKです。


ではこれから、OpenPyXLを使って、このテスト用のExcelファイルを読み込んで表示する方法や、新しいデータを書き込む方法を解説していきます。

まずは、OpenPyXLを使ってExcelファイルを読み込む方法です。


OpenPyXLで、Excelファイルを読み込む(セル番号で指定する)

ここでは、読み込むセルを「セル番号」で指定する方法を説明します。


① セルを読み込む(1つのセル)

まずは、1つのセルを読み込む方法です。A1, B2のように、「セル番号」を使ってセルを指定します。

サンプルコード


import openpyxl

# Excelファイルを開く
workbook = openpyxl.load_workbook("test.xlsx")

# シートを選択する
sheet = workbook["Sheet1"]

# セルの値を取得する
cell_value = sheet["A1"].value

# 結果を表示する
print(cell_value)

実行結果

NAME


コードの解説

load_workbook()関数を使って、Excelファイルを読み込みます。

シートを選択するために、load_workbook['Sheet1']のようにシート名を指定します。

セルの値を取得するために、sheet['A1'].valueのようにセル番号を指定します。


② セルを読み込む(複数のセル)

次は、複数のセルを読み込む方法です。範囲指定(例:A1:C5)を使って、複数のセルを指定します。

サンプルコード


import openpyxl

# Excelファイルを開く
workbook = openpyxl.load_workbook("test.xlsx")

# シートを選択する
sheet = workbook["Sheet1"]

# 複数のセルを読み込む
cells = sheet["A1:C2"]

# 結果を表示する
for row in cells:
    for cell in row:
        print(cell.value, end=" ")
    print()

実行結果

このサンプルコードを実行すると、指定した範囲のセルの値が表示されます。

NAME Age Gender
Yamada 25 man​


コードの解説

上記のコードでは、まずopenpyxl.load_workbook関数でExcelファイルを開き、workbook変数に格納しています。

次に、workbook["Sheet1"]でシートを選択し、sheet変数に格納しています。

そして、sheet["A1:C2"]で複数のセルを読み込み、cells変数に格納しています。

最後に、forループでセルの値を表示しています。


注意点

セル番号はアルファベット「大文字」で指定する必要があります。小文字で指定するとエラーが発生するので、注意してください。

セルの範囲指定については、必ず左上のセルから右下のセルに向かって範囲を指定するようにしましょう。

例えば、「A1:C5」は正しい範囲指定ですが、「C5:A1」は誤った範囲指定となります。


openpyxlで、Excelファイルを読み込む(行と列で指定する)

ここでは、読み込むセルを「行」と「列」で指定する方法を解説します。


① セルを読み込む(1つのセル)

ここでは、「行」と「列」で指定してセルを読み込む方法を見ていきます。

openpyxlの行と列の番号は、ゼロではなく、1(イチ)から始まります。

サンプルコード


import openpyxl

# Excelファイルを開く
workbook = openpyxl.load_workbook("test.xlsx")

# シートを選択する
sheet = workbook["Sheet1"]

# セルの値を取得する
cell_value = sheet.cell(row=1, column=1).value

# 結果を表示する
print(cell_value)

実行結果

このサンプルコードを実行すると、(2, 2)にあるセル(年齢)が表示されます。

NAME


コードの解説

load_workbook()関数を使って、Excelファイルを読み込みます。

シートを選択するために、workbook['Sheet1']のようにシート名を指定します。

セルの値を取得するために、sheet.cell(row=row, column=col).valueのように行と列の番号を指定します。

行と列の番号は、1(イチ)から始まるので、注意してください。


② セルを読み込む(複数のセル)

つづいて、「行」と「列」で指定して複数のセルを読み込む方法を見ていきます。

サンプルコード


import openpyxl
# Excelファイルを開く
workbook = openpyxl.load_workbook("test.xlsx")
# シートを選択する
sheet = workbook["Sheet1"]
# 複数のセルを読み込む
for row in range(1, 3):
    for col in range(1, 4):
        cell_value = sheet.cell(row=row, column=col).value
        print(cell_value, end=" ")
    print()

実行結果

このサンプルコードを実行すると、指定した範囲のセルの値が表示されます。

NAME Age Gender
Yamada 25 man​


コードの解説

範囲指定の場合は、2つのforループを使って、各セルの値を取得します。

この方法でセルを指定する場合、行と列の番号を数値で指定できるので、プログラムでセルの範囲を自由に変更することができます。

行と列の番号は、1(イチ)から始まります。


注意点

以下は、セルを「行」と「列」で指定するときの注意点です。ハマりやすいので注意してください。

注意点

  • 行と列の数値は、1(イチ)から始まる
    Pythonのリストや配列と異なり、0(ゼロ)から始まることはありません。そのため、行と列の指定には特に注意してください。
  • セルの範囲外を指定すると、エラーが発生することがある
    指定する行と列が実際のワークシート内に存在することを確認してください。


OpenPyXLで、Excelファイルに書き込む

これまでのセクションでは、openpyxlを使ってExcelファイルを読み込む方法について説明しました。

続いては、Excelファイルに書き込む方法を見ていきましょう。


① 書き込むセルを「セル番号」で指定する

最初は、「セル番号」を指定してExcelファイルに書き込む方法です。

サンプルコード


import openpyxl

# Excelファイルを開く
workbook = openpyxl.load_workbook("test.xlsx")

# シートを選択する
sheet = workbook["Sheet1"]

# セルに書き込む
sheet["A4"] = "New Data"

# ファイルに保存する
workbook.save("test_modified.xlsx")

実行結果

実行後、新しく生成された "test_modified.xlsx" ファイルの A4 セルに "New Data" が書き込まれます。


コードの解説

このコードでは、sheet["A4"] = "New Data" でセル番号を指定して新しいデータを書き込んでいます。

最後に workbook.save() を使って、新しいファイル名でExcelファイルを保存しています。


② 書き込むセルを「行」と「列」で指定する

続いて、「行」と「列」で指定してExcelファイルに書き込む方法です。

サンプルコード


import openpyxl

# Excelファイルを開く
workbook = openpyxl.load_workbook("test.xlsx")

# シートを選択する
sheet = workbook["Sheet1"]

# セルに書き込む
sheet.cell(row=4, column=1).value = "New Data"

# ファイルに保存する
workbook.save("test_modified.xlsx")

実行結果

実行後、新しく生成された "test_modified.xlsx" ファイルの A4 セル(行4、列1)に "New Data" が書き込まれます。


コードの解説

このコードでは、sheet.cell(row=4, column=1).value = "New Data" で「行」と「列」を指定して新しいデータを書き込んでいます。

最後に workbook.save() を使って、新しいファイル名でExcelファイルを保存しています。


以上で、行と列の指定方法を使ってExcelファイルに書き込む方法を解説しました。

どちらの方法を使っても問題ありません。自分にとってわかりやすい方を使いましょう。(わたしの場合は、行と列の番号で指定することが多いです。)


Excelファイルに日付をつけて保存する

ファイル名に日付をつけて保存する

最後は、ファイル名に現在の日付を付け加えて、ファイルを保存する方法です。

日付をファイル名に含めることで、バージョン管理や履歴管理がかんたんになります。以下にその方法を紹介します。

サンプルコード


import openpyxl
from datetime import datetime

# Excelファイルを開く
workbook = openpyxl.load_workbook("test.xlsx")

# シートを選択する
sheet = workbook["Sheet1"]

# セルに書き込む
sheet.cell(row=4, column=1).value = "New Data with Date"

# 現在の日付を取得し、ファイル名に追加する
today = datetime.now().strftime('%Y%m%d')
new_filename = f"test_modified_{today}.xlsx"

# ファイルに保存する
workbook.save(new_filename)


実行結果

以下のような、日付が入ったファイルが作成されていれば成功です。

sample_20231001.xlsx


コードの解説

このコードでは、datetime.now().strftime('%Y%m%d') を使って現在の日付を取得し、フォーマットを '年月日'(YYYYMMDD)に変換しています。

その後、new_filename に新しいファイル名を作成し、日付を追加しています。

最後に workbook.save() を使って、新しいファイル名でExcelファイルを保存しています。


PythonでExcelファイルを扱う注意点(3つ)

PythonでExcelファイルを使うときに、特に気を付けることがあります。それは次の3つです。

Excelファイルを扱うときの注意点(3つ)

  • Excelファイルの形式
  • 処理速度とメモリの使用量
  • Excelファイルの互換性


では、順番に説明していきます。


注意点①:Excelファイルの形式

PythonでExcelファイルを使うときには、ファイル形式を確認して、適切なライブラリを選択する必要があります。

Excelファイルの形式と、Pythonライブラリの対応は以下のとおり。

Excelファイルの形式(拡張子)Pythonライブラリ
.xlsxlrd
.xlsxOpenPyXL、xlrd、pandas
.xlsmOpenPyXL、xlrd、pandas
.xlsbpyxlsb

上記のように、PythonでExcelファイルを読み書きするには、Excelファイルの形式に合ったライブラリを使う必要があります。

たとえば、以下のとおり。

  • openpyxlライブラリ: xlsxファイルに対応していますが、xlsファイルには対応していません。
  • xlrdライブラリ: xlsファイルに対応していますが、xlsxファイルには対応していません。


PythonでExcelファイルを扱うときは、ファイル形式を確認して、そのファイル形式に合ったライブラリを選ぶ必要があります。


注意点②:プログラムの処理速度とメモリの使用量

Pythonで大規模なExcelファイルを扱うときは、プログラムの処理速度やメモリ使用量に注意が必要です。

特に、データ量が多い場合や、複雑な処理を行う場合、処理が遅くなったり、メモリの使用量が増えることがあります。

  • 処理速度: プログラムがどれだけ早く動くかということ。
  • メモリの使用量: プログラムがどれだけのメモリ量を使うかということ。


以下に、プログラムの処理速度を上げたり、メモリの使用量を減らす方法を3つ紹介します。


方法①:Excelファイルのサイズに応じて、適切なライブラリを選ぶ

以下のように、Excelファイルのサイズに応じて、Pythonライブラリを使い分けます。

ExcelファイルサイズPythonライブラリメモリ使用量
小さいopenpyxl、xlrd、pandas少ない
大きいpandas、xlwings多い

Excelファイルサイズが小さい場合は、openpyxlxlrdpandasの3つのライブラリを使用。

Excelファイルサイズが大きい場合は、pandasxlwingsといういうようにライブラリを使い分けする場合があります。


openpyxlには、読み込み時にメモリ使用量をおさるためのオプション(read_onlyoptimized_writeモード)があります。


方法②:Excelファイルの不要なデータや計算式を削除する

たとえば、空白のセルや行列、使わないシートやグラフなどを削除することで、Excelファイルのサイズを小さくできます。


方法③:Excelファイルの読み書きを効率的に行う

たとえば、一度に多くのセルやシートを読み書きするよりも、必要なセルやシートだけを読み書きする方が早くできます。

また、読み込んだデータを変数に保存しておくことで、同じデータを何度も読み込まないようにできます。


PythonでExcelファイルを読み書きするときには、プログラムの処理速度と、メモリの使用量に注意する必要があります。


注意点③:Excelファイルの互換性

PythonでExcelファイルを扱うためのライブラリ(プログラムの部品)によって、サポートできるExcelの機能やフォーマットは異なります。

対応していないライブラリを使うと、Excelファイルを開けないことがあります。

PythonでExcelファイルを使う前には、以下を確認しておくこと。

Excelファイルのバージョンや形式を確認し、そのExcelファイルに合ったPythonライブラリを選択すること。


また、Pythonライブラリでは、一部のExcel機能(条件付き書式、シート保護、ピボットテーブルなど)がサポートされていないことがあります。

トラブルが発生したときは元に戻せるよう、必ずExcelファイルのバックアップを取ることも大切です。


互換性」とは、異なるバージョンや形式のExcelファイルを正しく読み書きできるかどうか?、ということ。


まとめ:OpenPyXLでExcelファイルをかんたんに読み書き!

この記事では、OpenPyXLを使って、Excelファイルを読み書きする方法や、日付を含むファイル名で保存する方法も説明しました。

これらの基本的な操作をマスターすることで、Pythonを使ってExcelファイルのデータ処理や自動化ができるようになります。今後もOpenPyXLの機能を活用して、効率的なデータ処理を行いましょう。

入門者の方でもかんたんに取り組める内容ですので、ぜひ実際にコードを書いて動かしてみてください。


-Python