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 を発生させます。自動処理ではシート名とセル値も確認します。