PythonでExcelを使いこなす!Openpyxlで知るべき10の手法

Openpyxlを用いたPythonとExcelの連携の解説記事のサムネイル Python
この記事は約15分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

Pythonのライブラリー、Openpyxlを用いたExcel操作のための全面的なガイドをここで提供します。

この記事では、PythonとExcelを使いこなすための10の手法とサンプルコードを初心者向けに詳細に解説します。

この記事を通じて、PythonとOpenpyxlを使ってExcelをもっと有効に活用する方法を身につけましょう。

●Pythonとは

Pythonは、読みやすく、効率的なコードを書くことを重視した人気のあるプログラミング言語です。

シンプルさとコードの可読性を維持しながら、多機能で強力なプログラミング能力を提供します。

○Pythonの基本概念

Pythonの特徴としては、インデントによるブロックの表現、動的な型付け、豊富な標準ライブラリなどがあります。

これにより、Pythonは多くの業界で使われており、ウェブ開発からデータ分析、機械学習まで幅広い用途に使用されています。

●Openpyxlとは

OpenpyxlはPythonでExcelファイルを読み書きするためのライブラリです。

Excelの様々な機能をPythonから操作できるため、Excel操作の自動化やデータ分析作業を大幅に効率化することが可能になります。

○Openpyxlのインストール方法

Openpyxlのインストールは非常に簡単で、Pythonのパッケージ管理ツールであるpipを使って行うことができます。

コマンドラインから次のコマンドを入力します。

pip install openpyxl

このコードではpipを使ってPythonのパッケージopenpyxlをインストールしています。

この例ではインターネット接続環境下でコマンドラインからコマンドを実行しています。

●PythonとExcelの連携の基本

PythonとOpenpyxlを使ってExcelと連携する基本的な操作について見ていきましょう。

まずは、Excelファイルの開き方から始めていきます。

○サンプルコード1:Excelファイルの開き方

from openpyxl import load_workbook
wb = load_workbook('example.xlsx')

このコードでは、openpyxlの関数load_workbookを使ってExcelファイル(ここでは’example.xlsx’)を開く方法を表しています。

この例では、’example.xlsx’というExcelファイルをPythonで開いています。

○サンプルコード2:Excelシートの選択方法

ws = wb['Sheet1']

このコードでは、wbオブジェクト(先ほど開いたExcelファイル)からシート名(ここでは’Sheet1’)を指定してExcelシートを選択する方法を表しています。

この例では、’Sheet1’という名前のシートを選択しています。

●Excelの読み書き操作

PythonとOpenpyxlを使用すると、Excelの読み書き操作を簡単に行うことができます。

それでは、Openpyxlを使ったセルへの書き込みと読み込みの方法を見ていきましょう。

○サンプルコード3:セルへの書き込みと読み込み

ここで表すコードでは、Excelの特定のセルに値を書き込み、その値を読み込む方法を紹介します。

この例では、’A1’というセルに”Hello, Excel!”というテキストを書き込み、その後でそのセルからテキストを読み込んでいます。

from openpyxl import Workbook

# 新しいワークブックを作成
wb = Workbook()

# アクティブなシートを取得
ws = wb.active

# A1セルに値を書き込む
ws['A1'] = 'Hello, Excel!'

# A1セルから値を読み込む
value = ws['A1'].value

# 読み込んだ値を出力
print(value)

このコードを実行すると、新しいワークブックが作成され、アクティブなシートの’A1’セルに’Hello, Excel!’という文字列が書き込まれます。

その後、そのセルから値を読み込み、読み込んだ値を出力します。

結果として’Hello, Excel!’というテキストがコンソールに表示されます。

○サンプルコード4:行と列へのアクセス方法

Openpyxlを使用すれば、特定の行や列に直接アクセスすることも可能です。

下記のコードでは、1行目と’A’列のすべてのセルにアクセスする方法を表しています。

from openpyxl import load_workbook

# ワークブックを開く
wb = load_workbook('sample.xlsx')

# アクティブなシートを取得
ws = wb.active

# 1行目のすべてのセルにアクセス
for cell in ws[1]:
    print(cell.value)

# 'A'列のすべてのセルにアクセス
for cell in ws['A']:
    print(cell.value)

このコードは、’sample.xlsx’というExcelファイルを開き、アクティブなシートの1行目と’A’列のすべてのセルにアクセスします。

それぞれのセルの値がコンソールに出力されます。

この手法は、特定の行や列にあるデータを一括で処理する際に便利です。

●Excelの高度な操作

PythonとOpenpyxlを使用すれば、Excelのセルの書式設定、グラフ作成、フィルタリングとソートなどの高度な操作も可能になります。

○サンプルコード5:Excelのセルの書式設定

下記のコードでは、Openpyxlを用いてExcelのセルの書式を設定する方法を紹介します。

この例では、’A1’セルのフォントを変更し、背景色を設定しています。

from openpyxl import Workbook
from openpyxl.styles import Font, Color, PatternFill

# 新しいワークブックを作成
wb = Workbook()

# アクティブなシートを取得
ws = wb.active

# A1セルに値を書き込む
ws['A1'] = 'Hello, Excel!'

# A1セルのフォントを変更
ws['A1'].font = Font(name='Arial', size=20, bold=True, color=Color(rgb="FFFFFF00"))

# A1セルの背景色を設定
ws['A1'].fill = PatternFill(fill_type="solid", fgColor="0000FF00")

# ワークブックを保存
wb.save('sample.xlsx')

このコードを実行すると、新しいワークブックが作成され、アクティブなシートの’A1’セルに’Hello, Excel!’という文字列が書き込まれ、そのセルのフォントと背景色が変更されます。

そして、そのワークブックが’sample.xlsx’という名前で保存されます。

○サンプルコード6:Excelのグラフ作成

次に、Openpyxlを使用してExcelのグラフを作成する方法を解説します。

下記のコードでは、数値データを持つセルからグラフを作成しています。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

# 新しいワークブックを作成
wb = Workbook()

# アクティブなシートを取得
ws = wb.active

# データを書き込む
for i in range(10):
    ws.append([i])

# グラフを作成
chart = BarChart()
values = Reference(ws, min_col=1, min_row=1, max_row=10)
chart.add_data(values)
ws.add_chart(chart, 'C3')

# ワークブックを保存
wb.save('sample_chart.xlsx')

このコードを実行すると、新しいワークブックが作成され、アクティブなシートに0から9までの数値データが書き込まれます。

そのデータを元に、棒グラフが作成され、シートの’C3’セルの位置に追加されます。

その後、ワークブックが’sample_chart.xlsx’という名前で保存されます。

○サンプルコード7:Excelのフィルタリングとソート

Excelの強力な機能の一つにフィルタリングとソートがありますが、Openpyxlを使ってこれらの操作を行うこともできます。

下記のコードでは、データのフィルタリングとソートを行っています。

from openpyxl import Workbook
from openpyxl.worksheet.auto_filter import FilterColumn

# 新しいワークブックを作成
wb = Workbook()

# アクティブなシートを取得
ws = wb.active

# データを書き込む
data = [
    ['Fruit', 'Quantity'],
    ['Apple', 5],
    ['Banana', 7],
    ['Cherry', 3],
    ['Dragon Fruit', 10],
    ['Elderberry', 1]
]
for row in data:
    ws.append(row)

# フィルタリングとソートを設定
ws.auto_filter.ref = 'A1:B6'
ws.auto_filter.add_sort_condition('B2:B6')

# ワークブックを保存
wb.save('sample_filter.xlsx')

このコードを実行すると、新しいワークブックが作成され、アクティブなシートに果物とその数量を表すデータが書き込まれます。

そして、そのデータ範囲にフィルタとソートの設定が施され、数量でソートされます。

最後に、そのワークブックが’sample_filter.xlsx’という名前で保存されます。

●PythonとExcelの連携の応用例

次に、Openpyxlを使用してPythonとExcelを連携させ、より高度な操作を行うための応用例をいくつか紹介します。

○サンプルコード8:Excelの自動更新

まずは、Excelの自動更新についてです。

毎日、同じようなデータ処理を行う場合、Pythonを用いてこれを自動化することが可能です。

次のコードでは、日々更新されるデータを持つExcelファイルを開き、新しいデータを追加するためのコードを紹介しています。

from openpyxl import load_workbook
import datetime

# ワークブックを開く
wb = load_workbook('sample.xlsx')

# シートを指定する
ws = wb.active

# 新しい日付とデータを追加
today = datetime.date.today()
ws.append([today, '新しいデータ'])

# ワークブックを保存する
wb.save('sample.xlsx')

このコードでは、まずload_workbook関数を用いて既存のワークブックを開きます。

次に、active属性を使ってアクティブなシートを選択します。

そして、datetimeモジュールを使用して今日の日付を取得し、新たに追加するデータとともに一行分のリストを作成します。

最後に、appendメソッドを使って新たな行をシートに追加し、saveメソッドを使ってワークブックを保存します。

このコードを実行すると、’sample.xlsx’のアクティブなシートの最後の行に、今日の日付と’新しいデータ’が追加されます。

これを定期的に実行することで、Excelファイルを自動的に更新することが可能となります。

○サンプルコード9:Excelのバッチ処理

次に、バッチ処理について説明します。

複数のExcelファイルに同じ操作を行いたい場合、一つずつ手動で操作を行うのは大変な作業です。

しかし、PythonとOpenpyxlを用いれば、このような作業も自動化できます。

import glob
from openpyxl import load_workbook

# 処理するExcelファイルのリストを取得
files = glob.glob('*.xlsx')

# 各ファイルに対して処理を行う
for file in files:
    # ワークブックを開く
    wb = load_workbook(file)

    # シートを指定
    ws = wb.active

    # データを追加
    ws.append(['新しいデータ'])

    # ワークブックを保存
    wb.save(file)

このコードでは、globモジュールを用いて、処理を行うExcelファイルのリストを取得します。

そして、そのリスト内の各ファイルに対して、先ほどと同様にデータを追加し、ファイルを保存します。

これにより、複数のExcelファイルに対して一括で操作を行うことができます。

○サンプルコード10:Excelと他のデータソースとの連携

最後に、Excelと他のデータソースとの連携についてです。

Pythonの力を借りることで、ExcelとデータベースやWeb APIなど、様々なデータソースとの連携が可能となります。

次のコードは、Web APIから取得したデータをExcelに書き込む例です。

import requests
from openpyxl import Workbook

# Web APIからデータを取得
response = requests.get('https://api.example.com/data')
data = response.json()

# 新しいワークブックを作成
wb = Workbook()
ws = wb.active

# データをExcelに書き込む
for item in data:
    ws.append([item['id'], item['name'], item['value']])

# ワークブックを保存
wb.save('data.xlsx')

このコードでは、まずrequestsモジュールを用いてWeb APIからデータを取得します。

取得したデータはJSON形式なので、jsonメソッドを使ってPythonのリストや辞書に変換します。

次に、Workbookクラスを使って新たなワークブックを作成し、取得したデータをシートに書き込みます。

最後に、saveメソッドを使ってワークブックを保存します。

●注意点と対策

Openpyxlを使ってPythonでExcelを操作する際には、いくつかの注意点があります。

それらを理解して、適切な対策を講じることが重要です。

まず一つ目の注意点として、Openpyxlは新しいExcelのフォーマット(.xlsx、.xlsm)のみに対応しており、古いフォーマット(.xls)には対応していません。

古いフォーマットを読み込もうとするとエラーが出てしまいます。

そのため、旧式のフォーマットを使用している場合は、新しいフォーマットに変換するか、xlrdやpyxlsbのような他のライブラリを用いる必要があります。

次に、Excelのセルの値を取得する際、セルが空の場合でもデフォルトで’None’が返されます。

この挙動を考慮に入れてコードを書くか、または空のセルを特定の値(例えば空文字)で埋めるなどの対策が必要です。

また、Excelのワークブックに対する変更はメモリ上でのみ行われ、実際のファイルには反映されません。

そのため、ワークブックを保存する際には必ずsaveメソッドを呼び出す必要があります。

これらの注意点を踏まえた上で、Openpyxlを使ってExcelを操作することで、Pythonの強力な機能をフルに活用することが可能となります。

さて、それでは具体的な対策の一例を見てみましょう。

○サンプルコード:空のセルを特定の値で埋める

from openpyxl import load_workbook

# ワークブックを読み込む
wb = load_workbook('sample.xlsx')

# ワークシートを取得
ws = wb.active

# 各セルをチェックし、空のセルを0で埋める
for row in ws.iter_rows():
    for cell in row:
        if cell.value is None:
            cell.value = 0

# ワークブックを保存
wb.save('sample_filled.xlsx')

このコードでは、ワークブックの各セルを一つずつチェックし、その値がNone(つまりセルが空)である場合に0を代入しています。

この例では数値0を代入していますが、必要に応じて空文字や任意の値を代入することも可能です。

コードを実行すると、元のワークブックと同じ内容の新しいワークブックが作成されますが、この新しいワークブックでは、元のワークブックの空のセルが全て0で埋められます。

●Openpyxlのカスタマイズ方法

Openpyxlはカスタマイズが可能であり、自分のニーズに合わせて様々な設定を行うことができます。

例えば、Excelの書式設定(フォントの色やサイズ、セルの背景色など)を変更したり、グラフや画像を挿入したりすることが可能です。

それでは、具体的なカスタマイズの一例として、特定のセルのフォントを変更するサンプルコードを見てみましょう。

○サンプルコード:特定のセルのフォントを変更する

from openpyxl import load_workbook
from openpyxl.styles import Font

# ワークブックを読み込む
wb = load_workbook('sample.xlsx')

# ワークシートを取得
ws = wb.active

# フォントを定義(太字、サイズ20、赤色)
font = Font(bold=True, size=20, color='FF0000')

# A1セルのフォントを変更
ws['A1'].font = font

# ワークブックを保存
wb.save('sample_modified.xlsx')

このコードでは、Fontクラスを用いて新しいフォントを定義し、それを特定のセルのfont属性に設定しています。

この例ではA1セルのフォントを太字、サイズ20、赤色に変更しています。

コードを実行すると、元のワークブックと同じ内容の新しいワークブックが作成されますが、この新しいワークブックではA1セルのフォントが変更されています。

これらの例は一部の機能に過ぎませんが、Openpyxlはこれ以外にも多くのカスタマイズオプションを提供しています。

詳しくは公式ドキュメントを参照してください。

まとめ

以上、PythonのライブラリOpenpyxlを使ってExcelを操作するための基本的な手法と、その応用例について解説しました。

この記事を通じて、PythonとExcelの連携の可能性を少しでも感じていただければ幸いです。

なお、Openpyxlは非常に強力なツールですが、その全ての機能を理解し活用するには時間と練習が必要です。しかし、その努力は間違いなく報われるでしょう。

どんなに複雑なExcel作業も、PythonとOpenpyxlがあればスムーズかつ効率的に処理することが可能となります。

是非、このガイドを活用し、PythonとExcelのパワフルな連携を体験してみてください。