
Python で Excel ファイルを作成することは、データドリブンなアプリケーションにおいて非常に一般的な要件です。
業務ユーザーが内容を確認・共有しやすい形式でアプリケーションデータを提供する必要がある場合、Excel は現在でも最も実用的で広く受け入れられている選択肢の一つです。
実際のプロジェクトでは、Python を使って Excel ファイルを生成する処理は、自動化フローの出発点になることがよくあります。
データはデータベース、API、内部サービスなどから取得され、Python がそれらを一定のレイアウトや命名規則に従った構造化された Excel ファイルへ変換します。
本記事では、Spire.XLS for Python を使用した Python による Excel ファイル作成について、ワークブックを一から生成する方法をはじめ、データの書き込み、基本的な書式設定、既存ファイルの更新までを段階的に解説します。 すべてのサンプルは、実際の自動化シナリオを想定した実用的な視点で紹介します。
目次
- PythonでExcelファイルを作成する代表的なシナリオ
- 開発環境の準備
- Pythonで新しいExcelファイルを一から作成する
- Pythonで構造化データをXLSXファイルに書き込む
- 実務レポート向けにExcelデータを整形する
- 既存のExcelファイルを読み取り・更新する
- 読み取りと書き込みを組み合わせたワークフロー
- Excelファイル作成に適したPythonアプローチの選び方
- 実装時によくある問題と対処法
- よくある質問
1. PythonでExcelファイルを作成する代表的なシナリオ
Python による Excel ファイル作成は、単独の処理としてではなく、より大きなシステムの一部として利用されることがほとんどです。代表的な例は次のとおりです。
- 日次・週次・月次の業務レポート生成
- 分析や監査用にデータベースの検索結果をエクスポート
- バックエンドサービスやバッチ処理から Excel ファイルを生成
- 社内システムや外部パートナーとのデータ連携を自動化
これらの場面では、Python を用いて Excel ファイルを自動生成することで、手作業を削減し、データの一貫性と再現性を確保できます。
2. 開発環境の準備:PythonでExcelファイルを作成するために
本チュートリアルでは、Excel 操作の例として Spire.XLS for Python を使用します。
Excel ファイルを生成する前に、開発環境を整えておきましょう。
Pythonのバージョン
Excel 自動化には、Python 3.x のいずれの最新版でも問題ありません。
Spire.XLS for Python のインストール
Spire.XLS for Python は pip から簡単にインストールできます。
pip install Spire.XLS
または、Spire.XLS for Python をダウンロード して、プロジェクトに手動で組み込むことも可能です。
本ライブラリは Microsoft Excel に依存せず動作するため、サーバー環境、定期実行ジョブ、Excel がインストールされていない自動化環境にも適しています。
3. Pythonで新しいExcelファイルを一から作成する
このセクションでは、Python を使用して Excel ファイルを一から作成する方法を紹介します。 データを書き込む前に、ワークブックやワークシート、ヘッダー行などの基本構造を定義することが目的です。
初期レイアウトをコードで生成することで、すべての出力ファイルが同じ構造を持ち、後続のデータ処理に適した状態になります。
例:空のExcelテンプレートを作成する
from spire.xls import Workbook, FileFormat
# 新しいワークブックを作成
workbook = Workbook()
# 既定のワークシートを取得
sheet = workbook.Worksheets[0]
sheet.Name = "テンプレート"
# タイトル用のプレースホルダーを追加
sheet.Range["B2"].Text = "月次レポート(テンプレート)"
# Excelファイルとして保存
workbook.SaveToFile("template.xlsx", FileFormat.Version2016)
workbook.Dispose()
テンプレートファイルのプレビュー:

この例では次の処理を行っています。
- Workbook() により、新しい Excel ワークブックを作成(既定で 3 枚のワークシートを含む)
- Worksheets[0] で最初のワークシートを取得し、名前を設定
- Range[].Text を使用して特定のセルにテキストを設定
- SaveToFile() で Excel ファイルとして保存。FileFormat.Version2016 は保存形式を指定
Pythonで複数ワークシートを持つExcelファイルを作成する
Python による Excel 自動生成では、1 つのワークブック内に複数のワークシートを配置し、関連データを論理的に整理することが一般的です。 各ワークシートには、異なるデータセット、集計結果、処理結果を格納できます。
from spire.xls import Workbook, FileFormat
workbook = Workbook()
# 最初のワークシートを取得して名前を設定
sales_sheet = workbook.Worksheets[0]
sales_sheet.Name = "売上データ"
# 不要な2番目のワークシートを削除
workbook.Worksheets.RemoveAt(1)
# 集計用の新しいワークシートを追加
report_sheet = workbook.Worksheets.Add("集計")
report_sheet.Range["A1"].Text = "月次売上レポート"
# ファイルを保存
workbook.SaveToFile("sales_report.xlsx", FileFormat.Version2016)
workbook.Dispose()
この構成は、1 つのシートに元データを読み込み、別のシートに処理結果を書き出すといった読み書きワークフローでよく利用されます。
PythonによるExcelファイル形式の選択
Python で Excel ファイルを生成する場合、XLSX は最も一般的な形式で、最新の Microsoft Excel で完全にサポートされています。 複数シート、数式、書式設定にも対応しており、ほとんどの自動化シナリオに適しています。
Spire.XLS for Python では、以下の形式も生成可能です。
- XLSX:現行の標準形式(推奨)
- XLS:旧バージョンとの互換性向け
- CSV:データ交換やインポート用途のテキスト形式
本記事では、レポート生成やテンプレート用途に適した XLSX 形式を使用します。対応形式の一覧は FileFormat 列挙型 を参照してください。
4. Pythonで構造化データをXLSXファイルに書き込む
実際のアプリケーションでは、Excel に書き込まれるデータがコード内にハードコードされることはほとんどありません。
多くの場合、データはデータベースのクエリ結果、API レスポンス、または中間処理の結果として生成されます。
一般的なパターンとして、すでに構造化されたデータの最終出力先として Excel を使用するケースが挙げられます。
Python例:アプリケーションデータから月次売上レポートを生成する
ここでは、アプリケーション側ですでに売上データが生成されていると仮定します。
各レコードには、商品情報と計算済みの数値が含まれており、Python ではそれを 辞書のリスト として扱います。
from spire.xls import Workbook
workbook = Workbook()
sheet = workbook.Worksheets[0]
sheet.Name = "売上レポート"
# ヘッダー行の設定
headers = ["商品名", "数量", "単価", "合計金額"]
for col, header in enumerate(headers, start=1):
sheet.Range[1, col].Text = header
# 通常、データはデータベースやサービス層から取得される
sales_data = [
{"product": "ノートパソコン", "qty": 15, "price": 1200},
{"product": "モニター", "qty": 30, "price": 250},
{"product": "キーボード", "qty": 50, "price": 40},
{"product": "マウス", "qty": 80, "price": 20},
{"product": "ヘッドセット", "qty": 100, "price": 10}
]
# データ行の入力
row = 2
for item in sales_data:
sheet.Range[row, 1].Text = item["product"]
sheet.Range[row, 2].NumberValue = item["qty"]
sheet.Range[row, 3].NumberValue = item["price"]
sheet.Range[row, 4].NumberValue = item["qty"] * item["price"]
row += 1
# Excelファイルの保存
workbook.SaveToFile("monthly_sales_report.xlsx")
workbook.Dispose()
月次売上レポートのプレビュー:

この例では、商品名などの文字列は CellRange.Text、数量や金額などの数値は CellRange.NumberValue を使用して書き込んでいます。 これにより、Excel 上で正しく計算・並び替え・書式設定を行うことができます。
この方法はデータ量が増えても自然にスケールし、ビジネスロジックと Excel 出力処理を分離できる点が特長です。 さらに詳しい書き込み例については、PythonでExcel書き込みを自動化する方法 を参照してください。
5. 実務レポート向けにExcelデータを整形する
実際の業務では、Excel ファイルはそのまま関係者へ共有されることが多く、 書式設定のない生データは可読性や理解性に欠ける場合があります。
よく行われる書式設定には、次のようなものがあります。
- ヘッダー行の強調表示
- 背景色や罫線の適用
- 数値や通貨の表示形式設定
- 列幅の自動調整
以下の例では、これらの基本的な書式設定を組み合わせて、レポートの視認性を向上させています。
Python例:Excelレポートの可読性を向上させる
from spire.xls import Workbook, Color, LineStyleType
# 作成済みのExcelファイルを読み込む
workbook = Workbook()
workbook.LoadFromFile("monthly_sales_report.xlsx")
# 最初のワークシートを取得
sheet = workbook.Worksheets[0]
# 使用されているセルのフォント名を設定する
sheet.Range.Style.Font.FontName = "Yu Gothic UI"
# ヘッダー行の書式設定
header_range = sheet.Range.Rows[0]
header_range.Style.Font.IsBold = True
header_range.Style.Font.Size = 12
header_range.Style.Color = Color.get_LightBlue()
# 通貨形式を適用
sheet.Range["C2:D6"].NumberFormat = "$#,##0.00"
# データ行の背景色を交互に設定
for i in range(1, sheet.Range.Rows.Count):
row_range = sheet.Range[i, 1, i, sheet.Range.Columns.Count]
if i % 2 == 0:
row_range.Style.Color = Color.get_LightGreen()
else:
row_range.Style.Color = Color.get_LightYellow()
# データ範囲に罫線を追加
sheet.Range["A2:D6"].BorderAround(LineStyleType.Medium, Color.get_LightBlue())
# 列幅を自動調整
sheet.AllocatedRange.AutoFitColumns()
# 書式設定済みファイルを保存
workbook.SaveToFile("monthly_sales_report_formatted.xlsx")
workbook.Dispose()
書式設定後の月次売上レポート:

書式設定はデータの正確性そのものには影響しませんが、 共有・保存される業務レポートでは、事実上必須とされることが多いです。 より高度な書式設定については、PythonでExcelワークシートの書式設定を行う方法 を参照してください。
6. Pythonによる既存Excelファイルの読み取りと更新
既存の Excel ファイルを更新する場合、特定のセルを固定位置で更新するのではなく、 条件に一致する行を検索して更新するケースが一般的です。
Python例:Excelファイルを更新する
from spire.xls import Workbook
workbook = Workbook()
workbook.LoadFromFile("monthly_sales_report.xlsx")
sheet = workbook.Worksheets[0]
# 商品名で対象行を検索し、ステータスを設定
sheet.Range["E1"].Text = "ステータス" # ヘッダーを設定
for row in range(2, sheet.LastRow + 1):
product_name = sheet.Range[row, 1].Text
if product_name == "ノートパソコン": # 日語商品名に合わせる
sheet.Range[row, 5].Text = "確認済み"
break
# 更新されたファイルを保存
workbook.SaveToFile("monthly_sales_report_updated.xlsx")
workbook.Dispose()
更新後の月次売上レポート:

7. 読み取りと書き込みを組み合わせたワークフロー
外部から取り込んだ Excel ファイルのデータは、そのままでは分析やレポートに適さないことがあります。 重複行、不整合な値、不完全なデータなどが含まれている場合が少なくありません。
実際の自動化システムでは、Excel ファイルは最終成果物ではなく中間データとして使われることも多く、 次のような課題が頻繁に発生します。
- 同一データが複数行に分かれている
- 数値であるべき項目が文字列になっている
- 空行や欠損データが存在する
- レポート用途に適さない構造
こうした場合、Excel を読み込み、Python 側で正規化・集計処理を行い、結果を新しいシートに書き出すことが一般的です。
Python例:売上データを正規化・集計する
以下の例では、商品ごとに複数行存在する売上データを読み込み、 商品ごとの合計売上金額を計算した サマリーシート を生成します。
from spire.xls import Workbook, Color
workbook = Workbook()
workbook.LoadFromFile("raw_sales_data.xlsx")
source = workbook.Worksheets[0]
summary = workbook.Worksheets.Add("集計") # 日語名に変更
# 出力用ヘッダーを定義
summary.Range["A1"].Text = "注文ID"
summary.Range["B1"].Text = "売上合計"
product_totals = {}
# 元データを読み込み、商品ごとに売上を集計
for row in range(2, source.LastRow + 1):
product = source.Range[row, 1].Text
value = source.Range[row, 4].Value
# 不完全・無効な行をスキップ
if not product or value is None:
continue
try:
amount = float(value)
except ValueError:
continue
if product not in product_totals:
product_totals[product] = 0
product_totals[product] += amount
# 集計結果を書き込み
target_row = 2
for product, total in product_totals.items():
summary.Range[target_row, 1].Text = product
summary.Range[target_row, 2].NumberValue = total
target_row += 1
# 合計行を追加
summary.Range[summary.LastRow, 1].Text = "合計"
summary.Range[summary.LastRow, 2].Formula = "=SUM(B2:B" + str(summary.LastRow - 1) + ")"
# 書式設定
summary.Range.Style.Font.FontName = "Yu Gothic UI"
summary.Range[1, 1, 1, summary.LastColumn].Style.Font.Size = 12
summary.Range[1, 1, 1, summary.LastColumn].Style.Font.IsBold = True
for row in range(2, summary.LastRow + 1):
for column in range(1, summary.LastColumn + 1):
summary.Range[row, column].Style.Font.Size = 10
summary.Range[
summary.LastRow, 1, summary.LastRow, summary.LastColumn
].Style.Color = Color.get_LightGray()
summary.Range.AutoFitColumns()
workbook.SaveToFile("normalized_sales_summary.xlsx")
workbook.Dispose()
正規化・集計後のサマリー:

データ検証や集計、正規化といった処理は Python が担い、Excel は業務ユーザー向けの最終出力形式として利用されます。これにより、手作業による修正や複雑な数式に頼る必要がなくなります。
Excelファイル作成に適したPythonアプローチの選び方
Python には Excel ファイルを作成する方法が複数存在しますが、 最適な選択は Excel をワークフローの中でどのように使うかによって異なります。
Spire.XLS for Python は、次のようなシナリオに特に適しています。
- Microsoft Excel がインストールされていない環境での生成・更新
- バックエンドサービス、バッチ処理、定期実行ジョブ
- ワークシート構造、書式、数式を厳密に制御したい場合
- Excel を 配布・連携用フォーマット として利用するケース
データ分析や統計処理は別のライブラリで行い、 最終段階で Free Spire.XLS を使って Excel ファイルを生成するという構成も一般的です。
このように処理と表示を分離することで、保守性と信頼性を高めることができます。 詳細なガイドについては、Spire.XLS for Python チュートリアル を参照してください。
8. PythonでExcelファイルを作成・書き込みする際によくある問題
Excel 自動化では、次のような実務的な問題に遭遇することがあります。
ファイルパスや権限エラー 保存先ディレクトリの存在と書き込み権限を事前に確認してください。
想定外のデータ型 文字列と数値を明示的に使い分け、Excel 上での計算エラーを防ぎます。
ファイルの上書き タイムスタンプ付きのファイル名や専用出力フォルダを利用しましょう。
大規模データの処理 行単位で順次書き込み、ループ内での不要な書式設定を避けることが重要です。
これらを早期に考慮することで、データ量や処理の複雑さが増しても安定した自動化が可能になります。
9. まとめ
PythonでExcelファイルを作成することは、レポート作成、データエクスポート、ドキュメント更新を自動化するための実用的な手段です。 ファイル生成、構造化データの書き込み、書式設定、更新処理を組み合わせることで、 単発のスクリプトを超えた安定した自動化システムを構築できます。
Spire.XLS for Python は、自動化・一貫性・保守性が求められる環境において、 Excel 処理を確実に実装するための有効な選択肢です。 一時ライセンスを申請 することで、Excel 自動化の可能性を最大限に活用できます。
FAQ:PythonでExcelファイルを作成する
PythonはMicrosoft ExcelなしでExcelファイルを作成できますか?
はい。 Spire.XLS for Python のようなライブラリは Microsoft Excel に依存せず動作するため、 サーバー環境やクラウド、自動化ワークフローに適しています。
Pythonは大規模なExcelファイルの生成に向いていますか?
適切に実装すれば可能です。 行を順次書き込み、ループ内で不要な書式設定を避けることで、大量データにも対応できます。
既存のExcelファイルを上書きしない方法はありますか?
タイムスタンプ付きのファイル名を使用する、 または出力専用ディレクトリを用意する方法が一般的です。
Pythonで他システムが作成したExcelファイルを更新できますか?
はい。 対応しているファイル形式であれば、Python で読み取り・修正・拡張が可能です。






