PythonでExcel(.xlsx)を自在に操作:openpyxlで読み書きをマスター!


 


現代のビジネスにおいて、**Excelファイル(.xlsx形式)はデータの管理や共有に欠かせないツールです。Pythonを使ってExcelファイルを自動的に操作できれば、データ入力、レポート作成、データ抽出といった定型業務を大幅に効率化できます。そこで登場するのが、Pythonの強力なライブラリopenpyxl**です。

openpyxlは、新しいExcelファイル形式である.xlsxファイルの読み込みと書き込みに特化しており、セルの値の取得・設定はもちろん、スタイル設定、グラフの追加、画像の挿入といった高度な操作まで可能です。この記事では、openpyxlの基本的な使い方を、短いサンプルコードとともに分かりやすく解説します。


 

openpyxlとは?なぜ使うべきか?

 

openpyxlは、PythonでExcel 2010以降の.xlsx形式ファイルを操作するためのデファクトスタンダードなライブラリです。

 

openpyxlの主な特徴

 

  • .xlsx形式に特化: 古い.xls形式ではなく、現在の標準である.xlsxファイルを直接扱えます。

  • 高機能: セルの値の読み書きだけでなく、シートの追加・削除、セースタイルの設定(フォント、色、罫線など)、数式の扱い、条件付き書式、グラフや画像の挿入など、Excelの多くの機能をサポートしています。

  • 使いやすさ: 直感的でPythonicなAPIを提供しており、比較的少ないコードで目的の操作を実現できます。

 

インストール方法

 

使用する前に、pipコマンドでインストールが必要です。

Bash
 
pip install openpyxl

 

Excelファイルを読み込む:openpyxlの使い方

 

openpyxlを使ってExcelファイル(.xlsx)からデータを読み込む方法を学びましょう。

 

ワークブックを開き、シートを選択する

 

まず、Excelファイル(ワークブック)を開き、データを読み込みたいワークシートを選択します。

Python
 
import openpyxl

# 読み込むExcelファイル名(.xlsx形式)
file_name = "sample_data.xlsx"

# --- テスト用にExcelファイルを仮作成(openpyxlを使用) ---
# ワークブックとシートの作成
wb_temp = openpyxl.Workbook()
ws_temp = wb_temp.active
ws_temp.title = "Sheet1" # シート名を変更

# データを書き込む
ws_temp['A1'] = "名前"
ws_temp['B1'] = "年齢"
ws_temp['A2'] = "Alice"
ws_temp['B2'] = 30
ws_temp['A3'] = "Bob"
ws_temp['B3'] = 25

# ファイルを保存
wb_temp.save(file_name)
print(f"'{file_name}' をテスト用に作成しました。\n")
# ----------------------------------------------------

try:
    # ワークブックを読み込みモードで開く
    wb = openpyxl.load_workbook(file_name)

    # アクティブなシート(通常は最初に開かれるシート)を取得
    # ws = wb.active

    # シート名を指定してシートを取得
    ws = wb['Sheet1']

    # シートのタイトル(名前)を表示
    print(f"アクティブシート名: {ws.title}")

    # シートの最大行と最大列を表示
    print(f"最大行数: {ws.max_row}")
    print(f"最大列数: {ws.max_column}")

except FileNotFoundError:
    print(f"エラー: ファイル '{file_name}' が見つかりません。")

# 出力例:
# アクティブシート名: Sheet1
# 最大行数: 3
# 最大列数: 2

 

セルのデータを読み込む

 

シートから個々のセルのデータを読み取ります。

Python
 
import openpyxl

file_name = "sample_data.xlsx" # 上記で作成したファイルを使用

try:
    wb = openpyxl.load_workbook(file_name)
    ws = wb['Sheet1']

    # 特定のセルの値を取得 (セル番地で指定)
    cell_a1_value = ws['A1'].value # A1セルの値
    cell_b2_value = ws['B2'].value # B2セルの値

    print(f"A1セルの値: {cell_a1_value}")
    print(f"B2セルの値: {cell_b2_value}")

    # 行や列をループしてデータを読み込む
    print("\n--- シート全体のデータ ---")
    for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
        for cell in row:
            print(f"{cell.coordinate}: {cell.value}", end="\t")
        print() # 改行

except FileNotFoundError:
    print(f"エラー: ファイル '{file_name}' が見つかりません。")

# 出力例:
# A1セルの値: 名前
# B2セルの値: 30
# --- シート全体のデータ ---
# A1: 名前   B1: 年齢
# A2: Alice  B2: 30
# A3: Bob    B3: 25
  • ws['A1'].valueのように、Excelと同じセル番地で直接アクセスできます。

  • iter_rows()iter_cols()を使うと、指定した範囲のセルをイテレート(繰り返し処理)できます。


 

Excelファイルを書き込む:openpyxlの使い方

 

openpyxlライブラリを使って新しいExcelファイル(.xlsx)を作成し、データを書き込む方法を学びましょう。

 

ワークブックとシートを作成する

 

まず、新しいワークブックを作成し、その中にワークシートを追加します。

Python
 
import openpyxl

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

# デフォルトで作成されるシートを取得(または wb.create_sheet() で新規作成)
ws = wb.active
ws.title = "売上データ" # シート名を変更

# 新しいシートを追加することも可能
# ws_new = wb.create_sheet("集計結果", index=1) # 2番目のシートとして追加

print(f"新しいワークブックに '{ws.title}' シートを作成しました。")

 

セルにデータを書き込む

 

作成したシートの指定したセルにデータを書き込みます。

Python
 
import openpyxl

output_file_name = "output_report.xlsx"

wb = openpyxl.Workbook()
ws = wb.active
ws.title = "売上データ"

# セルにデータを書き込む (ws['セル番地'] = 値)
ws['A1'] = "商品名"
ws['B1'] = "売上高"
ws['C1'] = "利益"

ws['A2'] = "A商品"
ws['B2'] = 10000
ws['C2'] = 3000

ws['A3'] = "B商品"
ws['B3'] = 8000
ws['C3'] = 2500

# 数式を書き込む
ws['B4'] = "=SUM(B2:B3)" # B2とB3の合計を計算
ws['A4'] = "合計"

# スタイルを設定する (例: フォントを太字に)
from openpyxl.styles import Font, Border, Side, PatternFill
bold_font = Font(bold=True)
ws['A1'].font = bold_font
ws['B1'].font = bold_font
ws['C1'].font = bold_font
ws['A4'].font = bold_font
ws['B4'].font = bold_font

# ファイルを保存
wb.save(output_file_name)

print(f"'{output_file_name}' にExcelファイルを書き込みました。")
# 出力後、output_report.xlsxが作成されていることを確認してください
  • セルへの値の書き込みはws['A1'] = valueのように直感的です。

  • 数式も文字列として直接セルに書き込むことができます(例: =SUM(B2:B3))。

  • openpyxl.stylesモジュールを使えば、フォント、色、罫線、塗りつぶしなど、様々なセルスタイルを設定できます。


 

まとめと活用例

 

openpyxlは、PythonでExcelファイル(.xlsx)を読み書きするための非常に強力で柔軟なライブラリです。基本的なセルの読み書きから、数式、スタイル設定まで、幅広いニーズに対応できます。

 

openpyxlの活用例

 

  • 自動レポート生成: データベースから抽出したデータをExcelテンプレートに流し込み、グラフや計算結果を含んだレポートを自動生成します。

  • データクレンジング: 既存のExcelファイルを読み込み、不要なデータを削除したり、フォーマットを統一したりして、新しいExcelファイルとして保存します。

  • Webスクレイピングとの連携: Webサイトから取得したデータを整理し、Excelファイルに整形して出力します。

  • バッチ処理: 大量のExcelファイルから特定のデータを抽出し、別のファイルに統合するといった処理を自動化します。

openpyxlを使いこなせば、これまで手作業で行っていたExcel関連の業務を大幅に効率化し、Pythonによるデータ処理の幅を大きく広げることができます。ぜひ、あなたのプロジェクトにopenpyxlを取り入れてみてください。

 

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座