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コマンドでインストールが必要です。
pip install openpyxl
Excelファイルを読み込む:openpyxlの使い方
openpyxlを使ってExcelファイル(.xlsx)からデータを読み込む方法を学びましょう。
ワークブックを開き、シートを選択する
まず、Excelファイル(ワークブック)を開き、データを読み込みたいワークシートを選択します。
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
セルのデータを読み込む
シートから個々のセルのデータを読み取ります。
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)を作成し、データを書き込む方法を学びましょう。
ワークブックとシートを作成する
まず、新しいワークブックを作成し、その中にワークシートを追加します。
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}' シートを作成しました。")
セルにデータを書き込む
作成したシートの指定したセルにデータを書き込みます。
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爆速講座


