HOWTO · Python

PythonでExcelスプレッドシートに書き込む方法

pandas と openpyxl を使って Python から .xlsx ブックへ表やセルを書き込み、出力を検証する方法を説明します。

このページの内容

Python では pandas の DataFrame から Excel ブックを作成したり、openpyxl でセルを直接設定したりできます。表には pandas、直接操作には openpyxl、新規ブックの書式には XlsxWriter を使います。

pandas で DataFrame を .xlsx ファイルに書き込む

pandas の DataFrame.to_excel() は .xlsx ファイルを作成し、行と列を書き込み、シート名を指定できます。

次の例は表を書き込み、読み直して確認します。実行前に pandas と openpyxl をインストールしてください。

import pandas as pd

sales = pd.DataFrame({"Product": ["Notebook", "Pen"], "Units": [3, 8]})
sales.to_excel("sales.xlsx", sheet_name="Sales", index=False)

saved = pd.read_excel("sales.xlsx", sheet_name="Sales")
print(saved.to_dict(orient="records"))

出力には Notebook と Pen が含まれます。インデックスを列にしない場合は index=False を指定し、リストの長さをそろえます。

ExcelWriter で複数のシートを書き込む

pd.ExcelWriter を使うと複数の DataFrame を 1 つのブックに書けます。異なる sheet_name を指定し、コンテキストマネージャーに writer を閉じさせます。

import pandas as pd

sales = pd.DataFrame({"Product": ["Notebook", "Pen"], "Units": [3, 8]})
returns = pd.DataFrame({"Product": ["Pen"], "Units": [1]})

with pd.ExcelWriter("report.xlsx", engine="openpyxl") as writer:
    sales.to_excel(writer, sheet_name="Sales", index=False)
    returns.to_excel(writer, sheet_name="Returns", index=False)

print(pd.ExcelFile("report.xlsx").sheet_names)

出力は Sales と Returns です。コンテキストマネージャーで writer の閉じ忘れを防げます。

openpyxl でセルを書き込む

入力が DataFrame でない場合やシートとセルを直接扱う場合は openpyxl を使います。値を設定し、行を追加して保存します。

from openpyxl import Workbook, load_workbook

workbook = Workbook()
sheet = workbook.active
sheet.title = "Summary"
sheet["A1"] = "Product"
sheet["B1"] = "Units"
sheet.append(["Notebook", 3])
workbook.save("summary.xlsx")

saved = load_workbook("summary.xlsx", data_only=True)
print(saved["Summary"]["A2"].value, saved["Summary"]["B2"].value)

出力は Notebook 3 です。数値の位置には cell(row, column) も使えます。

pandas、openpyxl、XlsxWriter の選び方

表の出力には pandas、既存ブックやセル、数式、シートの操作には openpyxl を選びます。どちらも .xlsx を作成できます。

新しい書式付きブックには XlsxWriter が便利です。古い .xls が必須の場合だけ xlwt を使います。

拡張子、ライブラリ、エンジンを一致させてください。閉じた writer は後から編集できません。

ブックを検証し、よくある失敗を扱う

書き込み後にパスとブックの読み込みを確認します。出力がない場合は、実行されなかった、保存前に失敗した、または別の作業ディレクトリだった可能性があります。

from pathlib import Path

output = Path("missing.xlsx")
if not output.exists():
    raise FileNotFoundError(f"Expected export was not created: {output}")

print(output.suffix, output.stat().st_size > 0)

この境界チェックは missing.xlsx が作成されるまで FileNotFoundError を発生させます。自動処理ではシート名とセル値も確認します。