C# を使用してリストデータを Excel にエクスポートすることは、現代の .NET アプリケーションにおいて一般的な要件です。デスクトップアプリケーション、Web システム、バックグラウンドサービスのいずれを開発する場合でも、開発者はメモリ上のコレクション、特に List<T> を、ユーザーがダウンロード・分析・共有できる構造化された Excel ファイルに変換する必要があります。 本チュートリアルでは、Spire.XLS for .NET を使用し、Excel Interop を使わずに C# でオブジェクトのリストを Excel にエクスポートする方法を解説します。本ソリューションは .NET Core および最新の .NET バージョンに完全対応しており、一般的な業務データモデルで利用でき、Microsoft Excel のインストールも不要です。 目次 Interop を使用せずに C# で List を Excel にエクスポートする理由 C# でオブジェクトの List を Excel にエクスポートする エクスポートした Excel ワークシートの書式設定 .NET Core およびサーバーサイドでの互換性 まとめ よくある質問 なぜ Excel Interop を使用せずに C# で List を Excel にエクスポートするのか リストデータを Excel にエクスポートすることは、構造化された情報を、広く利用されている分かりやすい形式で提供する有効な方法です。実際の業務では、次のような場面でよく利用されます。 業務レポートや財務レポートの作成 Web アプリケーションで検索結果をダウンロード可能にする 非技術系の関係者とデータを共有する Excel を使用したオフライン分析や監査 従来、多くの開発者は Excel ファイルの生成に Excel Interop を使用してきました。しかし、Interop には以下のような制約があります。 実行環境に Microsoft Excel がインストールされている必要がある サーバーサイドや ASP.NET Core アプリケーションでの利用は推奨されない 単純なエクスポート処理に対して依存関係が重い このため、近年の .NET アプリケーションでは、Interop を使用しない Excel エクスポートが主流となっています。Spire.XLS for .NET のようなライブラリを使用すれば、Microsoft Office に依存することなく、List<T> を直接 Excel ファイルとして安全かつ確実に出力できます。 C# でオブジェクトの List を Excel にエクスポートする 実際のアプリケーションでは、単純な値ではなく、業務オブジェクトのリストとしてデータを扱うことがほとんどです。本セクションでは、現実的な帳票出力シナリオを想定し、再利用可能で Interop に依存しない方法で List<T> を Excel にエクスポートする手順を説明します。 事前準備 リストを Excel にエクスポートする前に、プロジェクトに Spire.XLS for .NET をインストールしてください。 NuGet から次のコマンドでインストールできます。 Install-Package Spire.XLS インストール後、追加の設定なしで List<T> の Excel 出力を開始できます。 エクスポート処理の流れ オブジェクトのリストを Excel にエクスポートする基本的な流れは、次のとおりです。 業務データを List<T> として準備する Excel のワークブックとワークシートを作成する オブジェクトのプロパティから列見出しを動的に生成する リストデータを行として書き込む Excel ファイルを保存する 以下のサンプルでは、これらの処理をすべて含めた実装例を示します。 完全なサンプル:List を Excel にエクスポート using Spire.Xls; using System; using System.Collections.Generic; using System.Reflection; public class OrderReport { public int OrderId { get; set; } public string CustomerName { get; set; } public DateTime OrderDate { get; set; } public decimal TotalAmount { get; set; } public string Status { get; set; } } class Program { static void Main() { // サンプル業務データの準備 List<OrderReport> orders = new List<OrderReport> { new OrderReport { OrderId = 20240101, CustomerName = "サンプル株式会社A", OrderDate = new DateTime(2024, 1, 5), TotalAmount = 1250000m, Status = "完了" }, new OrderReport { OrderId = 20240102, CustomerName = "テスト法人B", OrderDate = new DateTime(2024, 1, 8), TotalAmount = 860000m, Status = "処理中" }, new OrderReport { OrderId = 20240103, CustomerName = "デモ企業C", OrderDate = new DateTime(2024, 1, 12), TotalAmount = 430500m, Status = "キャンセル" } }; // ワークブックとワークシートを作成 Workbook workbook = new Workbook(); Worksheet sheet = workbook.Worksheets[0]; // リフレクションでプロパティ情報を取得 PropertyInfo[] properties = typeof(OrderReport).GetProperties(); // 列見出しを書き込み for (int i = 0; i < properties.Length; i++) { sheet.Range[1, i + 1].Text = properties[i].Name; } // データ行を書き込み for (int row = 0; row < orders.Count; row++) { for (int col = 0; col < properties.Length; col++) { object value = properties[col].GetValue(orders[row]); sheet.Range[row + 2, col + 1].Value2 = value; } } // Excel ファイルを保存 workbook.SaveToFile("OrderReport.xlsx", ExcelVersion.Version2016); } } 生成された Excel ファイルのプレビューは次のとおりです。 技術的なポイントと実装の補足 Workbook を生成し、workbook.Worksheets[0] で最初のワークシートを取得します リフレクション(Type.GetProperties)を使用して列見出しを動的に生成し、ハードコードを回避します 見出し行は Range.Text を使用して、1 行目に文字列として出力します 各オブジェクトの値は Range.Value2 を使用し、Excel 本来のデータ型を保持したまま書き込みます Workbook.SaveToFile を使用してExcelファイルを生成します この実装パターンは、再利用可能なエクスポート処理や帳票生成機能の構築に適しています。 なお、List<T> ではなく DataTable としてデータを取得する場合も、Spire.XLS for .NET には効率的なエクスポート手段が用意されています。詳細は C# で DataTable を Excel にエクスポートする方法 を参照してください。 エクスポートした Excel ワークシートの書式設定 Spire.XLS for .NET では、基本的なデータ出力に加えて、Excel ファイルの可読性や実用性を高めるための書式設定も行えます。 代表的な書式設定には、次のようなものがあります。 見出し行のスタイル設定 日付や数値の表示形式の指定 列幅の自動調整 セル内のフォント設定 例:基本的な書式設定を適用する using System.Drawing; // 見出し行の書式設定 CellStyle headerStyle = workbook.Styles.Add("HeaderStyle"); headerStyle.Font.FontName = "Yu Gothic UI"; headerStyle.Font.Size = 12f; headerStyle.Font.IsBold = true; headerStyle.Color = Color.LightGray; headerStyle.HorizontalAlignment = HorizontalAlignType.Center; sheet.Range[1, 1, 1, sheet.LastColumn].Style = headerStyle; // 日付列と金額列の表示形式を設定 sheet.Range[2, 3, orders.Count + 1, 3].NumberFormat = "yyyy-mm-dd"; sheet.Range[2, 4, orders.Count + 1, 4].NumberFormat = "#,##0.00"; // 行の高さと列幅を自動調整 sheet.AllocatedRange.AutoFitRows(); sheet.AllocatedRange.AutoFitColumns(); 書式設定後の Excel シートのプレビューは以下のとおりです。 書式を適用することで、生成された Excel ファイルはより業務向けで、そのまま利用可能な品質になります。 スタイル設定、セル結合、条件付き書式、数式など、より高度な操作については、C# で Excel ワークシートを作成・書式設定する方法 を参照してください。 .NET Core およびサーバーサイドでの互換性 Spire.XLS for .NET は .NET Core および最新の .NET バージョンに完全対応しており、以下のような環境で利用できます。 ASP.NET Core Web アプリケーション Web API クラウド環境やコンテナ環境 バックグラウンドサービスや定期実行ジョブ Excel Interop に依存しないため、サーバーサイドや本番環境でも安全に利用できます。 ASP.NET Core や Web API プロジェクトで Excel ファイルを生成し、クライアントへ返却する方法については、次の記事を参照してください。 C# を使用して ASP.NET Core で Excel ファイルをエクスポートする まとめ C# で List を Excel にエクスポートする処理は、Excel Interop に依存する必要はありません。Spire.XLS for .NET を使用すれば、List<T> を構造化された Excel ファイルへ効率的に変換でき、.NET Framework と .NET Core の両環境で安定して動作します。 Interop を使用しないことで、デプロイの複雑さを軽減し、アプリケーションの安定性を向上させ、業務データのエクスポートにおける柔軟性も高まります。 複雑な帳票からシンプルなリスト出力まで、Spire.XLS は現代的な C# アプリケーションに適した、信頼性と拡張性の高いソリューションです。評価目的や試用制限の解除には、30 日間の一時ライセンス を利用できます。 よくある質問 Q1. 大量の List データも効率的にエクスポートできますか? はい。Spire.XLS for .NET はサーバーサイド利用を前提として設計されており、大規模な List<T> データも効率的に処理できます。さらに大量の場合は、バッチ処理や分割出力によってパフォーマンスを向上させることが可能です。 Q2. Microsoft Excel のインストールは必要ですか? いいえ。Spire.XLS for .NET は Microsoft Excel に依存せず、Excel Interop も使用しないため、サーバー環境やクラウド環境でも利用できます。 Q3. 列見出しや表示形式をカスタマイズできますか? はい。列見出しは手動でカスタマイズでき、日付・数値・スタイルなどの書式もプログラムから指定できます。高度な書式設定については、C# Excel 書式設定ガイド を参照してください。 Q4. ASP.NET Core や Web API でも利用できますか? はい。本エクスポート処理は ASP.NET Core、Web API、バックグラウンドサービスなど、あらゆるサーバーサイドの .NET 環境で問題なく動作します。