PythonでExcelを操作する

Update 2024.12.25

PythonでExcelを操作する

はじめに

PythonでExcelを操作する手段としては、openpyxlpandasxlsxwriter など複数のライブラリが利用されます。特に openpyxl は純粋にExcelファイル(.xlsx)を読み書きできるライブラリとして多く使われています。本記事では、PythonでExcelを扱う際に「よく使うお作法」や「実践的なポイント」を紹介します。

基本準備

仮想環境の利用

Pythonのプロジェクトでは、パッケージ管理のために仮想環境(venv)を作成し、その中で必要ライブラリをインストールしましょう。仮想環境の有無によって環境が混在するトラブルを防ぎ、プロジェクトの依存関係を明確にできます。

python -m venv venv
source venv/bin/activate  # Windowsは venv\Scripts\activate
pip install openpyxl

最小限の読み書きサンプル

openpyxl を例に、Excelファイルの読み書きをする最小限のコードを示します。まずは既存ファイルを読み込み、セルを参照してみる例です。

from openpyxl import load_workbook

# ファイルを読み込む
wb = load_workbook('sample.xlsx')
ws = wb.active  # アクティブなシートを取得

# セルからデータを読み取る
value = ws['A1'].value
print(value)

# セルにデータを書き込む
ws['B2'] = 'Hello Excel'
wb.save('sample_updated.xlsx')

このように、load_workbook() でブックを読み込み、wb.active で現在アクティブなシートにアクセスし、セル参照の文字列(例:'A1')を使うことで、値の取得や書き込みができます。

シート操作のポイント

シートの追加・名前の変更

ブックに新しいシートを追加したり、既存のシート名を変更するときは以下のようにします。

from openpyxl import Workbook

wb = Workbook()
ws1 = wb.active
ws1.title = "MainSheet"

# 新しいシートを追加
ws2 = wb.create_sheet("SubSheet")

wb.save('new_book.xlsx')

このとき、シート名が重複しないように注意しつつ、読みやすい名前を付けると後々のメンテナンスがしやすいです。

セル参照と書式設定

セルへのアクセスは、文字列で「A1」「B2」などと指定するほか、cell(row=x, column=y) メソッドを使う方法もあります。書式設定を行いたい場合は、スタイルを設定できます。

from openpyxl.styles import Font, PatternFill

ws['A1'].value = 'タイトル'
ws['A1'].font = Font(bold=True, size=14, color="FF0000")
ws['A1'].fill = PatternFill(start_color="FFFF00", 
                            end_color="FFFF00", 
                            fill_type="solid")
  • Font で太字、フォントサイズ、色などを設定
  • PatternFill でセルの背景色を指定

複数行のデータをまとめて書き込み

OpenPyXL では、リストやタプルの形式で複数セルに一括で書き込むこともできます。

# Pythonのリスト
data = [
    ["商品名", "価格", "在庫"],
    ["りんご", 120, 50],
    ["バナナ", 100, 80],
    ["オレンジ", 150, 40]
]

# rows引数を利用した書き込み
for row in data:
    ws.append(row)

append() を使うことで行が下に追記されていきます。既にデータがあるシートに大量の行を追記する場合に便利です。

日付・日時の扱い方

日付や日時をセルに書き込みたい場合、datetime モジュールを使ってセルに書き込むことが多いです。

import datetime
today = datetime.datetime.now()
ws['B1'] = today  # datetimeオブジェクトをそのまま書き込める

エクセル上ではyyyy-mm-dd HH:MM:SS のように日時が表示される場合が多いですが、必要に応じてセルの表示形式を変えると見やすくなります。

エクセルファイルを新規作成する

既存のファイルを読み込むのではなく、新規でブックを作成するには Workbook() を利用します。最低限の例は下記の通りです。

from openpyxl import Workbook

wb = Workbook()
ws = wb.active
ws['A1'] = "新規作成テスト"
wb.save('created.xlsx')

自動で "Sheet" という名前のワークシートが1つ作成されるので、必要に応じて名前を変更したり、シートを追加しましょう。

Excelファイルを開いたままにしない

ExcelファイルをWindowsのExcelアプリなどで開いたまま、Pythonで読み書きを行おうとするとファイルがロックされてエラーが発生する場合があります。操作の際は以下のことに注意しましょう。

  • 処理対象のExcelは閉じた状態でスクリプトを実行する
  • 処理後のExcelを開く際は、Pythonのスクリプトが完了しファイルを閉じたあとに行う

この点は開発環境によっては気付きにくいので、最初に気をつける習慣をつけておきましょう。

pandasを活用する場合

データ解析やテーブル形式の操作がメインであれば、pandasread_excel()to_excel() を使うと便利です。Excelを「表データ」として扱えるため、行列の操作が簡単になります。

import pandas as pd

# ExcelをDataFrameに読み込み
df = pd.read_excel("sample.xlsx", sheet_name="Sheet1")

# 表の先頭5行を確認
print(df.head())

# 新規のExcelに書き出し
df.to_excel("output.xlsx", index=False)

欠点としては、セルの細かい書式情報(色やフォントなど)を扱うのがやや難しくなる点です。書式よりもデータ処理が中心の場合は、pandasを使うと生産性が高まります。

スクリプトの構成・お作法まとめ

最後に、一般的なExcel操作スクリプトのお作法をまとめます。

  1. 仮想環境(venv)を用意し、必要ライブラリ(openpyxl, pandasなど)をインストール
  2. Excelファイルに対して処理を行う際はファイルを閉じた状態にしておく
  3. シート操作、セル操作は読みやすい命名をする(例:「売上シート」「サマリ」など)
  4. 必要以上の書式設定はパフォーマンスに影響するので、最小限のスタイルにとどめる
  5. 大量データの操作やテーブル処理が多い場合はpandas の利用を検討
  6. 処理を複数ファイルに分けるときは、関数化・クラス化して再利用性を高める

これらを意識するだけで、後からメンテナンスがしやすく、バグを生みにくいコードを書くことができます。

まとめ

本記事では、PythonでExcelを操作する際によく使うライブラリやお作法について説明しました。openpyxl は直接Excelファイルのセルや書式を制御できる汎用性の高いライブラリであり、pandas はテーブル状データを効率的に扱う際に大変便利です。最終的には、操作したいExcelの形式や、処理内容に合わせて使い分けるとよいでしょう。

習慣として、ファイルを開いたままにしない仮想環境を整備する、シート名やファイル名を分かりやすく保つといった基本的なお作法を守ることで、Excel操作のトラブルを最小限に抑えられます。

広告

アフィリエイト広告のスペース