Excel は、データの整理・分析・可視化において最も広く利用されているツールのひとつです。財務報告書から業務ダッシュボードに至るまで、多くのワークフローで Excel へのデータ出力が必要とされます。手動で情報を入力する代わりに、Python で Excel ファイルを書き込む処理を自動化すれば、処理がより迅速で、信頼性が高く、スケーラブルになります。 本チュートリアルでは、Python を使って Excel ファイルにデータを書き込む方法を解説します。構造化データの挿入、書式設定、エクスポートまでをカバーしており、例ではプログラムからワークブックを生成・カスタマイズできる Python の Excel ライブラリを使用しています。 本チュートリアルの内容: 環境のセットアップ Excel ファイルへのデータ書き込み 書き込み時の書式設定 複数ワークシートの操作 ベストプラクティス まとめ FAQ 環境のセットアップ Python で Excel ファイルを書き込むには、ワークブックの作成・読み込み・保存をプログラム的に行えるライブラリが必要です。Spire.XLS for Python はこれらの操作に対応した完全な API を提供し、レポート作成やデータ処理を自動化できます。 pip を使ってインストールします: pip install spire.xls インストール後は、次の 3 つの基本操作が可能になります: 新しいワークブックを作成 – Workbook() で新規 Excel ドキュメントを初期化。 既存のワークブックを読み込み – LoadFromFile() で既存の Excel ファイルを開く。 ワークブックを保存 – SaveToFile() でワークブックを .xlsx、.xls、CSV など任意の形式にエクスポート。 これらの操作が、Python におけるデータ書き込み、書式設定、複数シート管理の基礎となります。 Python で Excel ファイルにデータを書き込む 実際のビジネスシーンでは、新しい Excel ファイルの作成、既存レポートの更新、テキスト・数値・日付・数式などさまざまな種類のデータ書き込みが必要です。このセクションでは、これらのケースにおける効率的な Python での Excel データ操作を紹介します。 既存の Excel ファイルにデータを追加する 最新の売上データや在庫情報などを既存の Excel ワークブックに追記したい場合、ファイルを開いてプログラムで新しいデータ行を追加し、既存の内容を保持したまま保存できます。 from spire.xls import Workbook, ExcelVersion workbook = Workbook() workbook.LoadFromFile("Sample.xlsx") sheet = workbook.Worksheets[0] # 新しい行を追加 sheet.Range["A4"].Value = "ノートパソコン" sheet.Range["B4"].NumberValue = 5 sheet.Range["C4"].NumberValue = 120000 sheet.Range["A5"].Value = "モニター" sheet.Range["B5"].NumberValue = 10 sheet.Range["C5"].NumberValue = 30000 workbook.SaveToFile("output/updated_excel.xlsx", ExcelVersion.Version2016) ポイントとなる要素: LoadFromFile() – 既存の Excel ファイルをワークブックに読み込む。 Range["セル名"] – シート内の特定セルを参照。 Value / NumberValue – セルにテキストや数値を代入。 SaveToFile() – 指定形式でファイルを保存。 この方法により、既存のレポートを保持したまま継続的にデータを更新できます。 新しい Excel ファイルに複数行・列を書き込む 大規模なデータセットを扱う場合、セル単位で更新するよりも複数行・列を一括で書き込む方が効率的です。この方法は処理速度の向上だけでなく、ワークシート全体のデータ整合性を確保できます。 from spire.xls import Workbook, ExcelVersion # 新しい Excel ワークブックを作成 workbook = Workbook() sheet = workbook.Worksheets[0] orders = [ ["注文ID", "顧客名", "商品名", "数量", "単価", "ステータス"], [1001, "佐藤", "ノートパソコン", 2, 120000, "発送済み"], [1002, "鈴木", "モニター", 1, 30000, "保留中"], [1003, "高橋", "キーボード", 5, 4500, "配達済み"], [1004, "田中", "マウス", 3, 2500, "発送済み"], [1005, "伊藤", "タブレット", 1, 45000, "保留中"] ] for row_index, row_data in enumerate(orders, start=1): for col_index, value in enumerate(row_data, start=1): if isinstance(value, (int, float)): sheet.Range[row_index, col_index].NumberValue = value else: sheet.Range[row_index, col_index].Value = value workbook.SaveToFile("output/orders.xlsx", ExcelVersion.Version2016) 注目すべき要素: enumerate() – ループ処理で行番号・列番号を取得。 Range[row, col] – 行・列インデックスでセルを参照。 バッチ書き込みは、データベースのクエリ結果や業務レポートのエクスポートに特に有効です。 複数のデータ型を書き込む Excel のセルは、テキスト・数値・日付・数式など多様なデータ型を扱えます。正しいプロパティを使うことで、各データ型が適切に保存・表示され、計算や書式設定が正確に行われます。 from spire.xls import Workbook, ExcelVersion, DateTime, TimeSpan workbook = Workbook() sheet = workbook.Worksheets[0] # 一般的な値 sheet.Range[2, 2].Text = "一般的な例" sheet.Range[2, 3].Value = "サンプル123" # 数値 sheet.Range[3, 2].Text = "数値の例" sheet.Range[3, 3].NumberValue = 1234.56 sheet.Range[3, 3].NumberFormat = "0.000" # 日付 sheet.Range[4, 2].Text = "日付の例" sheet.Range[4, 3].DateTimeValue = DateTime.get_UtcNow() # 数式 sheet.Range[5, 2].Text = "数式の例" sheet.Range[5, 5].NumberValue = 1234.56 sheet.Range[5, 6].NumberValue = 6543.21 sheet.Range[5, 3].Formula = "=SUM(E5:F5)" # テキスト sheet.Range[6, 2].Text = "文字列の例" sheet.Range[6, 3].Text = "テキスト" # 真偽値 sheet.Range[7, 2].Text = "真偽値の例" sheet.Range[7, 3].BooleanValue = True sheet.AllocatedRange.Style.Font.FontName = "Yu Gothic UI" sheet.AllocatedRange.AutoFitColumns() workbook.SaveToFile("output/value_types.xlsx", ExcelVersion.Version2016) 主な関数・プロパティ: Value – 一般的な値を設定または取得。テキストや混在データ向け。 NumberValue – 数値を設定・取得し、計算や数値書式を正確に扱う。 DateTimeValue – 日付や時刻を設定・取得。正しいフォーマットで表示。 Formula – 数式を設定または取得し、動的な計算を可能にする。 BooleanValue – True/False のブール値を設定。 Text – 書式適用後の表示テキストを取得。 異なるデータ型を正しく扱うことは、ビジネス計算やレポートの精度を維持するために不可欠です。対応するデータ型の詳細は XlsRange API リファレンス を参照してください。 Python で Excel データを書き込みながら書式設定する Excel レポートをわかりやすく、プロフェッショナルに仕上げるには、データ入力や更新と同時に書式を適用することが重要です。このセクションでは、セルのスタイル、数値フォーマット、列幅・行高の調整方法を解説します。 セルスタイルの適用 フォント・罫線・背景色などのスタイルを適用することで、シートの可読性と視覚的な訴求力を高められます。 from spire.xls import Workbook, Color, FontUnderlineType, ExcelVersion, BordersLineType, LineStyleType workbook = Workbook() sheet = workbook.Worksheets[0] # 見出し sheet.Range["A1"].Value = "商品" sheet.Range["B1"].Value = "カテゴリ" sheet.Range["C1"].Value = "価格" sheet.Range["D1"].Value = "数量" sheet.Range["E1"].Value = "合計" # データ行 sheet.Range["A2"].Value = "ノートパソコン" sheet.Range["B2"].Value = "パソコン" sheet.Range["C2"].NumberValue = 150000 sheet.Range["D2"].NumberValue = 1 sheet.Range["E2"].Formula = "=C2*D2" sheet.Range["A3"].Value = "スマートフォン" sheet.Range["B3"].Value = "モバイル" sheet.Range["C3"].NumberValue = 90000 sheet.Range["D3"].NumberValue = 2 sheet.Range["E3"].Formula = "=C3*D3" # ヘッダーのスタイル header = sheet.Range["A1:E1"] header.Style.Font.FontName = "Yu Gothic UI" header.Style.Font.Size = 12.0 header.Style.Font.IsBold = True header.Style.Font.Underline = FontUnderlineType.Single header.Style.Interior.Color = Color.get_LightGray() header.Style.Borders[BordersLineType.EdgeRight].LineStyle = LineStyleType.Medium 主な構成要素: Style.Font – フォント関連の設定(太字、下線など)。詳細は Style.Font API ドキュメント を参照。 FontUnderlineType.Single – 一重下線を適用。 Interior.Color – 背景色を設定。 Borders.LineStyle – セルに罫線を追加。 スタイルを使うことで、重要な部分を強調し、レポート全体の見栄えを向上させられます。 Excel セルの数値フォーマットを設定 数値はフォーマットを適切に指定することで、通貨・パーセンテージ・整数など読みやすい形で表示できます。CellRange.NumberFormat を利用して、値の見せ方を制御します。 # 数値のフォーマット(円表示) sheet.Range["C2:C3"].NumberFormat = "¥#,##0" # 通貨 sheet.Range["D2:D3"].NumberFormat = "0" # 整数 sheet.Range["E2:E3"].NumberFormat = "¥#,##0" ポイント: NumberFormat – 表示形式を設定・取得。データはそのまま保持しつつ見た目だけを変えることが可能。 フォーマットコードで通貨記号、小数点、桁区切り、割合表示などを柔軟に設定可能。 適切な数値フォーマットにより、財務データが理解しやすく、よりプロフェッショナルに見えます。詳細は Python で Excel セルの数値フォーマットを設定する方法 を参照してください。 列幅と行高の調整 列幅や行高を適切に設定することで、内容を見やすく表示できます。自動調整や固定値の指定が可能です。 # 列幅と行の高さを自動調整 for col in range(1, 5): sheet.AutoFitColumn(col) for row in range(1, 3): sheet.AutoFitRow(row) #sheet.Range["A1:E3"].AutoFitColumns() #sheet.Range["A1:E3"].AutoFitRows() # 固定の列幅と行の高さを設定 sheet.Columns[1].Width = 150 sheet.Rows[1].Height = 30 workbook.SaveToFile("output/formatted_excel.xlsx", ExcelVersion.Version2016) ポイント: AutoFitColumn(colIndex) / AutoFitRow(rowIndex) – 指定列や行を自動調整。 CellRange.AutoFitColumns() / AutoFitRows() – 指定範囲の列や行を一括調整。 Columns[colIndex].Width / Rows[rowIndex].Height – 固定値を設定してレイアウトを統一。 動的データには自動調整、定型レイアウトには固定値を用いることで、見やすさと一貫性を両立できます。 より高度な Excel 書式設定(フォント・色・罫線・条件付き書式など)については、Python で Excel を書式設定する方法 を参照してください。 Python で複数のワークシートを管理する Excel では、複数のワークシートを使うことで関連情報を分離し、管理しやすくできます。たとえば、売上・仕入・在庫を同じワークブック内の別シートに整理できます。このセクションでは、Python で 複数シートを作成・参照・管理する方法を紹介します。 from spire.xls import Workbook, ExcelVersion workbook = Workbook() # 新しく作成されたワークブックには、 # デフォルトのワークシートが3つ含まれています # ワークシート名を日本語に設定 sheet = workbook.Worksheets[0] sheet.Name = "売上データ" sheet1 = workbook.Worksheets["Sheet2"] sheet1.Name = "仕入データ" sheet2 = workbook.Worksheets.Add("在庫データ") sheet2.Range["A1"].Value = "商品ID" sheet2.Range["B1"].Value = "在庫数" sheet2.Range["A2"].Value = "P001" sheet2.Range["B2"].NumberValue = 100 sheet2.Range["A3"].Value = "P002" sheet2.Range["B3"].NumberValue = 50 workbook.Worksheets.RemoveAt(2) workbook.SaveToFile("output/multi_sheet.xlsx", ExcelVersion.Version2016) 主な操作: Worksheets[Index] – インデックスでシートにアクセス。反復処理や先頭・末尾シート参照に便利。 Worksheets["シート名"] – 名前でシートにアクセス。順序変更の影響を受けにくく可読性が高い。 Worksheets.Add("シート名") – 新しいシートを作成し、部門・地域・カテゴリごとにデータを整理可能。 これにより、Excel ファイルを論理的に構成し、関連データを分離して明確かつ管理しやすくできます。 Python で Excel ファイルを書き込む際のベストプラクティス 効率性・一貫性・使いやすさを確保するため、以下のベストプラクティスに従うことを推奨します: 「Sheet1」ではなく「Sales_2024」のような 意味のあるシート名を使用する。 大量データはバッチ処理で書き込み、セル単位更新は避ける。 見出しや合計列などに 一貫した書式設定を適用する。 Excel の数式を活用して動的計算を維持する。 データ型を検証し、グラフや数式での誤解釈を防ぐ。 対象に適したファイル形式を選択:最新環境では .xlsx、互換性が必要な場合のみ .xls。 シートを論理的に整理し、関連データをグルーピングする。 これらを実践することで、再利用可能でプロフェッショナルなレポートを効率的に作成できます。 まとめ Python で Excel 書き込みを自動化すれば、レポート作成が大幅に効率化されます。ワークブック作成、データの効率的な書き込み、スタイル適用、シート管理、多様なデータ型の処理を組み合わせることで、一貫性・正確性・プロフェッショナル性を備えた Excel レポートが実現できます。さらに詳しく試すには、無料の一時ライセンスを申請するか、Free Spire.XLS for Python を利用できます。 Python での Excel 書き込み FAQ Q1: Python で既存の Excel ファイルに書き込めますか? はい、既存のワークブックを読み込み、データを追加・修正した上で保存できます。既存の内容は保持されます。 Q2: 大規模データを効率的に処理する方法は? 複数行のバッチ書き込みと、書式設定を最小限に抑えた挿入で、数千行規模でも高いパフォーマンスを維持できます。 Q3: 数式を Excel ファイルに含められますか? はい、=SUM() などの基本数式から複雑な計算式まで挿入でき、レポートを動的に更新できます。 Q4: 対応している Excel 形式は? Spire.XLS for Python は .xlsx、.xls、CSV、さらに PDF へのエクスポートにも対応しており、一般的な利用シナリオと互換性要件をカバーします。