
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 環境で問題なく動作します。






