フッターコンテンツにスキップ
IRONXLの使用

C# オブジェクトリストをExcelにエクスポート

オブジェクトのコレクションをExcelファイルにエクスポートすることは、ビジネスアプリケーションの基本要件です。 レポートの生成、データ分析情報の共有、バックアップ用の Excel ワークシートの作成など、開発者は、List<t> オブジェクトをプロフェッショナルなスプレッドシートに変換する信頼性の高い方法を必要としています。 IronXL は、サーバー上に Microsoft Office を必要とせずに、 .NET 10、 .NET Core、または.NET Frameworkで Excel ファイルを作成する際の従来の困難を解消するソリューションを提供します。

リストをExcelファイルにエクスポートすることがなぜ難しいのですか?

データを Excel にエクスポートするための従来のアプローチでは、多くの場合 Microsoft Office Interop が使用されますが、そのためにはサーバー上に MS Excel をインストールする必要があり、展開に問題が生じます。 リフレクションを使用した手動のセルごとの入力は時間を要し、エラーが起きやすいです。 IronXL のデータ インポート機能は、 MS Office や複雑なリフレクション コードを必要とせずに、データ ソースと Excel 列ヘッダー間のインテリジェントなプロパティ マッピングによってこれらの問題を解決します。

このライブラリは型変換を自動的に処理し、ネストオブジェクトをサポートし、CSVやXLSXファイルのような異なる形式でのデータの一貫性を維持します。 Interop なしで C# Excel 操作に取り組んでいる開発者にとって、 IronXL は、信頼性の高い Excel 生成とデータのインポート/エクスポート機能を必要とする最新 for .NETプロジェクトに最適な選択肢です。

IronXL はオブジェクトのエクスポートをどのように簡素化しますか?

IronXL を使用すると、COM 登録、Office ライセンス、相互運用アセンブリが不要になります。 List<t> を Excel にエクスポートすると、ライブラリは次の処理を実行します。

  • オブジェクトのプロパティを列ヘッダーに直接マッピングします
  • .NET型 (bool) を正しい Excel 表現に変換します
  • セルの値、範囲、書式を細かく制御できます
  • 1回のメソッド呼び出しでXLSX、XLS、CSVなどの形式で出力を保存します

このアプローチにより、何百行もの定型コードを書かなくても、クリーンでプロフェッショナルなスプレッドシート出力が得られます。 後でExcel からデータをインポートし直すこともできるため、往復のデータ ワークフローが簡単になります。

IronXL はどのようにインストールしますか?

IronXLを使い始めるには、最小限の設定が必要です。NuGetパッケージマネージャーコンソールからライブラリをインストールしてください。

Install-Package IronXL
Install-Package IronXL
SHELL

または.NET CLIを使用します:

dotnet add package IronXL
dotnet add package IronXL
SHELL

インストールが完了したら、ファイルにusing IronXL;ディレクティブを追加してください。追加のOffice依存関係やランタイムのインストールは必要ありません。

シンプルなリストを Excel にエクスポートするにはどうすればよいでしょうか?

次の例は、 .NET 10 で推奨されるスタイルであるトップレベル ステートメントを使用して、Employee オブジェクトのリストを XLSX ファイルにエクスポートする方法を示しています。

using IronXL;
using System.Data;

// Define the Employee model
record Employee(int Id, string Name, string Department, decimal Salary, DateTime HireDate);

// Create sample employee data
List<Employee> employees =
[
    new(1, "Alice Johnson", "Engineering", 95000, new DateTime(2020, 3, 15)),
    new(2, "Bob Smith",    "Marketing",   75000, new DateTime(2021, 7, 1)),
    new(3, "Carol Williams","Engineering",105000, new DateTime(2019, 11, 20))
];

// Build a DataTable from the list
DataTable dataTable = new();
dataTable.Columns.Add("Id",         typeof(int));
dataTable.Columns.Add("Name",       typeof(string));
dataTable.Columns.Add("Department", typeof(string));
dataTable.Columns.Add("Salary",     typeof(decimal));
dataTable.Columns.Add("HireDate",   typeof(DateTime));

foreach (var emp in employees)
    dataTable.Rows.Add(emp.Id, emp.Name, emp.Department, emp.Salary, emp.HireDate);

// Create an IronXL workbook and worksheet
WorkBook workbook  = new();
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

// Write headers
for (int col = 0; col < dataTable.Columns.Count; col++)
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);

// Write data rows
for (int row = 0; row < dataTable.Rows.Count; row++)
    for (int col = 0; col < dataTable.Columns.Count; col++)
        worksheet.SetCellValue(row + 1, col, dataTable.Rows[row][col]);

// Save as XLSX
workbook.SaveAs("EmployeeReport.xlsx");
Console.WriteLine("EmployeeReport.xlsx saved.");
using IronXL;
using System.Data;

// Define the Employee model
record Employee(int Id, string Name, string Department, decimal Salary, DateTime HireDate);

// Create sample employee data
List<Employee> employees =
[
    new(1, "Alice Johnson", "Engineering", 95000, new DateTime(2020, 3, 15)),
    new(2, "Bob Smith",    "Marketing",   75000, new DateTime(2021, 7, 1)),
    new(3, "Carol Williams","Engineering",105000, new DateTime(2019, 11, 20))
];

// Build a DataTable from the list
DataTable dataTable = new();
dataTable.Columns.Add("Id",         typeof(int));
dataTable.Columns.Add("Name",       typeof(string));
dataTable.Columns.Add("Department", typeof(string));
dataTable.Columns.Add("Salary",     typeof(decimal));
dataTable.Columns.Add("HireDate",   typeof(DateTime));

foreach (var emp in employees)
    dataTable.Rows.Add(emp.Id, emp.Name, emp.Department, emp.Salary, emp.HireDate);

// Create an IronXL workbook and worksheet
WorkBook workbook  = new();
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

// Write headers
for (int col = 0; col < dataTable.Columns.Count; col++)
    worksheet.SetCellValue(0, col, dataTable.Columns[col].ColumnName);

// Write data rows
for (int row = 0; row < dataTable.Rows.Count; row++)
    for (int col = 0; col < dataTable.Columns.Count; col++)
        worksheet.SetCellValue(row + 1, col, dataTable.Rows[row][col]);

// Save as XLSX
workbook.SaveAs("EmployeeReport.xlsx");
Console.WriteLine("EmployeeReport.xlsx saved.");
$vbLabelText   $csharpLabel

この例では、List<Employee>DataTable に変換し、ヘッダーと行をIronXLワークシートに書き込みます。 IronXL は、DateTime などのデータ型を自動的に処理し、生成されたスプレッドシートのフォーマットがきれいであることを保証します。 Excel の保存機能により、任意のスプレッドシート アプリケーションで開くことができる XLSX ファイルが生成されます。

C# IronXLを使用してオブジェクトのリストを Excel にエクスポートする : 画像 1 - C# IronXLを使用してオブジェクトのリストを Excel にエクスポートする に関連する 3 枚の画像のうち 1 枚目

複雑なビジネス オブジェクトをどのようにエクスポートしますか?

実際 for .NETアプリケーションは、より複雑なデータ構造を伴うことがよくあります。 次の例では、計算プロパティを使用して製品在庫レポートを生成します。

using IronXL;
using System.Data;

// Define the Product model with a computed property
record Product(
    string SKU,
    string ProductName,
    string Category,
    decimal Price,
    int StockLevel,
    bool IsActive,
    DateTime LastRestocked)
{
    public decimal CalculatedValue => Price * StockLevel;
}

// Build the product list
List<Product> products =
[
    new("TECH-001", "Wireless Mouse",      "Electronics",     29.99m, 150, true,  DateTime.Now.AddDays(-5)),
    new("TECH-002", "Mechanical Keyboard", "Electronics",     89.99m,  75, true,  DateTime.Now.AddDays(-12)),
    new("OFF-001",  "Desk Organizer",      "Office Supplies", 15.99m,   0, false, DateTime.Now.AddMonths(-1))
];

// Populate a DataTable
DataTable dt = new();
dt.Columns.Add("SKU",             typeof(string));
dt.Columns.Add("ProductName",     typeof(string));
dt.Columns.Add("Category",        typeof(string));
dt.Columns.Add("Price",           typeof(decimal));
dt.Columns.Add("StockLevel",      typeof(int));
dt.Columns.Add("IsActive",        typeof(bool));
dt.Columns.Add("LastRestocked",   typeof(DateTime));
dt.Columns.Add("CalculatedValue", typeof(decimal));

foreach (var p in products)
    dt.Rows.Add(p.SKU, p.ProductName, p.Category, p.Price,
                p.StockLevel, p.IsActive, p.LastRestocked, p.CalculatedValue);

// Create the workbook
WorkBook  wb = WorkBook.Create();
WorkSheet ws = wb.CreateWorkSheet("Inventory");

// Write column headers
string[] headers = ["SKU","ProductName","Category","Price",
                    "StockLevel","IsActive","LastRestocked","CalculatedValue"];
for (int col = 0; col < headers.Length; col++)
    ws.SetCellValue(0, col, headers[col]);

// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
    for (int col = 0; col < dt.Columns.Count; col++)
        ws.SetCellValue(row + 1, col, dt.Rows[row][col]);

// Auto-size columns for readability
for (int col = 0; col < headers.Length; col++)
    ws.AutoSizeColumn(col);

wb.SaveAs("ProductInventory.xlsx");
Console.WriteLine("ProductInventory.xlsx saved.");
using IronXL;
using System.Data;

// Define the Product model with a computed property
record Product(
    string SKU,
    string ProductName,
    string Category,
    decimal Price,
    int StockLevel,
    bool IsActive,
    DateTime LastRestocked)
{
    public decimal CalculatedValue => Price * StockLevel;
}

// Build the product list
List<Product> products =
[
    new("TECH-001", "Wireless Mouse",      "Electronics",     29.99m, 150, true,  DateTime.Now.AddDays(-5)),
    new("TECH-002", "Mechanical Keyboard", "Electronics",     89.99m,  75, true,  DateTime.Now.AddDays(-12)),
    new("OFF-001",  "Desk Organizer",      "Office Supplies", 15.99m,   0, false, DateTime.Now.AddMonths(-1))
];

// Populate a DataTable
DataTable dt = new();
dt.Columns.Add("SKU",             typeof(string));
dt.Columns.Add("ProductName",     typeof(string));
dt.Columns.Add("Category",        typeof(string));
dt.Columns.Add("Price",           typeof(decimal));
dt.Columns.Add("StockLevel",      typeof(int));
dt.Columns.Add("IsActive",        typeof(bool));
dt.Columns.Add("LastRestocked",   typeof(DateTime));
dt.Columns.Add("CalculatedValue", typeof(decimal));

foreach (var p in products)
    dt.Rows.Add(p.SKU, p.ProductName, p.Category, p.Price,
                p.StockLevel, p.IsActive, p.LastRestocked, p.CalculatedValue);

// Create the workbook
WorkBook  wb = WorkBook.Create();
WorkSheet ws = wb.CreateWorkSheet("Inventory");

// Write column headers
string[] headers = ["SKU","ProductName","Category","Price",
                    "StockLevel","IsActive","LastRestocked","CalculatedValue"];
for (int col = 0; col < headers.Length; col++)
    ws.SetCellValue(0, col, headers[col]);

// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
    for (int col = 0; col < dt.Columns.Count; col++)
        ws.SetCellValue(row + 1, col, dt.Rows[row][col]);

// Auto-size columns for readability
for (int col = 0; col < headers.Length; col++)
    ws.AutoSizeColumn(col);

wb.SaveAs("ProductInventory.xlsx");
Console.WriteLine("ProductInventory.xlsx saved.");
$vbLabelText   $csharpLabel

このコードは、SKU、価格、在庫レベル、再入荷日などの詳細を含む Product オブジェクトのリストを作成し、各アイテムの派生 CalculatedValue を計算します。 IronXL は、小数、ブール値、日付などのデータ型を処理し、プロフェッショナルなスプレッドシート出力を保証します。 結果、ProductInventory.xlsx は、ビジネス レポートや分析に適した、クリーンでデータ駆動型の在庫エクスポートを提供します。 既存のコードベースが既に DataTable オブジェクトで動作している場合は、 DataTable を Excel に直接エクスポートすることもできます。

C# IronXLを使用してオブジェクトのリストを Excel にエクスポートする: 画像 2 - 複雑なビジネス オブジェクトの出力例

列の幅と行の高さをどのように制御しますか?

データを書き込んだ後、スプレッドシートの視覚的なレイアウトをプログラムで制御できます。 IronXL の AutoSizeColumn メソッドは、各列をその内容に合わせて調整します。 あるいは、保存する前に明示的に列幅を設定したり、行や列を追加したり削除してシート構造を調整することもできます。

行の高さについては、 IronXL は固定ピクセルの高さを設定できる行レベルのプロパティを公開しています。これは、ワークシートを印刷したり PDF として共有したりする場合に役立ちます。 列と行のサイズを一定にすると、Excel ファイルをさまざまな画面解像度で開いたり、さまざまなスケールで印刷したりしたときの読みやすさも向上します。これは、外部の関係者に配布されるレポートの場合に特に重要です。

プロフェッショナルな書式設定を追加するにはどうすればいいですか?

フォーマット設定により、基本的なエクスポートが洗練されたレポートに変換されます。 IronXL のスタイリング API は、任意のセルまたは範囲のフォント、色、境界線、数値形式の設定を公開します。

using IronXL;

WorkBook  wb = WorkBook.Load("ProductInventory.xlsx");
WorkSheet ws = wb.DefaultWorkSheet;

// Bold header row with a blue background and white text
Range headerRange = ws["A1:H1"];
headerRange.Style.Font.Bold            = true;
headerRange.Style.BackgroundColor      = "#4472C4";
headerRange.Style.Font.Color           = "#FFFFFF";

// Format the Price column as currency
Range priceColumn = ws["D2:D100"];
priceColumn.Style.NumberFormat = "$#,##0.00";

// Highlight low-stock rows in red
for (int row = 2; row <= 4; row++)
{
    var stockCell = ws[$"E{row}"];
    if (stockCell.IntValue < 10)
        stockCell.Style.BackgroundColor = "#FF6B6B";
}

wb.SaveAs("FormattedInventory.xlsx");
Console.WriteLine("FormattedInventory.xlsx saved.");
using IronXL;

WorkBook  wb = WorkBook.Load("ProductInventory.xlsx");
WorkSheet ws = wb.DefaultWorkSheet;

// Bold header row with a blue background and white text
Range headerRange = ws["A1:H1"];
headerRange.Style.Font.Bold            = true;
headerRange.Style.BackgroundColor      = "#4472C4";
headerRange.Style.Font.Color           = "#FFFFFF";

// Format the Price column as currency
Range priceColumn = ws["D2:D100"];
priceColumn.Style.NumberFormat = "$#,##0.00";

// Highlight low-stock rows in red
for (int row = 2; row <= 4; row++)
{
    var stockCell = ws[$"E{row}"];
    if (stockCell.IntValue < 10)
        stockCell.Style.BackgroundColor = "#FF6B6B";
}

wb.SaveAs("FormattedInventory.xlsx");
Console.WriteLine("FormattedInventory.xlsx saved.");
$vbLabelText   $csharpLabel

これらのスタイリングオプションは、生のデータエクスポートを役員向けのレポートに変換します。 背景色付きの太字のヘッダーは視覚的な階層を作成します。 数値の書式設定により、通貨の値が正しく表示されます。 条件付きフォーマットは、低在庫水準などの重要なビジネスメトリックを強調し、エクスポートされたExcelスプレッドシートをインベントリ管理のためにすぐに実行可能にします。 高度なセル書式設定境界線スタイルについて詳しく学習して、エクスポートをさらに強化することができます。

C# IronXLを使用してオブジェクトのリストを Excel にエクスポート: 画像 3 - フォーマットされたワークシート

プログラムで条件付き書式を適用するにはどうすればよいですか?

IronXL は、Excel の組み込み機能を反映した条件付き書式設定ルールをサポートしています。 セル値のしきい値、テキストの一致、または日付の範囲に基づいてルールを定義できます。 ルールが範囲に適用されると、 IronXL は対応する XLSX 形式のメタデータを書き込むため、ファイルは Excel または Google Sheets で開いたときに期待どおりに動作します。

これは、エクスポートされたファイルを、単純な表形式のデータではなく色分けされたレポートを期待する非技術者の関係者が閲覧する場合に特に便利です。

エクスポートする前にデータをどのように並べ替えたりフィルタリングしますか?

List<t> を Excel に書き込む前に並べ替えたり、フィルター処理したりできます。 標準 LINQ を使用すると、従業員を部門や給与で並べ替えたり、製品をアクティブな項目のみにフィルター処理したりできます。 フィルタリングされたリストが準備できたら、上記と同じ列ごとのアプローチを使用して、そのリストをワークシートに書き込みます。

IronXL は、ワークブック内で直接、既に入力されている範囲内のセルの並べ替えもサポートしており、元のコレクションに戻らずに入力後の並べ替えが可能です。

リストを他のファイル形式にエクスポートするにはどうすればよいですか?

IronXLは XLSX に限定されません。 同じ WorkBook オブジェクトは、メソッドを 1 つ変更するだけで複数の形式で保存できます。

  • XLSX -- デフォルトの最新の Excel 形式: workbook.SaveAs("output.xlsx")
  • XLS -- 古いバージョンの Office 用の従来の Excel 形式
  • CSV - データパイプラインの互換性のためのカンマ区切り値
  • TSV -- タブ区切りの値

CSV形式にエクスポートすると、各ワークシートは個別のCSVファイルになります。そのため、 IronXLはエンドユーザーレポートだけでなく、ETLパイプライン、データサイエンスツール、サードパーティAPIで使用される中間データファイルの生成にも役立ちます。Windowsフォームアプリでよく使用されるDataGridViewデータのエクスポートでは、 IronXLは追加のアダプターを必要とせずにスムーズに機能します。

大規模なデータセットを効率的に処理するにはどうすればよいでしょうか?

数千行をエクスポートする場合、パフォーマンスが懸念されます。 次のガイドラインに留意してください。

  • リフレクションから個々のセル セッター メソッドを繰り返し呼び出すのではなく、最初に DataTable を入力し、ループで行を書き込みます。
  • 読み取りスキャン操作であるため、すべてのデータが書き込まれた後にのみ、AutoSizeColumn を呼び出します。
  • タイトなループ内でワークブックを開いて再度読み取り、再度保存することを避けます。メモリ内に完全なデータセットを構築してから、SaveAs を 1 回呼び出します。
  • 100,000 行を超えるデータセットの場合、Excel の行数制限を維持し、ファイル サイズを管理しやすい状態に保つために、エクスポートを複数のワークシートに分割することを検討してください。

IronXL は、XLSX ファイルが MemoryStream に直接書き込まれ、ディスク I/O を完全にバイパスしてファイル ダウンロード応答として返されるASP.NET Coreエクスポート ワークフローも提供します。

ASP.NET Coreでリストを Excel にエクスポートするにはどうすればよいですか?

Web API またはRazor Pages アプリケーションを構築する場合、通常は Excel ファイルをディスクに保存するのではなく、HTTP 応答として返す必要があります。 以下のパターンは、コントローラー アクションから FileContentResult を返します。

コントローラは、WorkBook を構築し、workbook.ToByteArray() を呼び出し、MIME タイプ application/vnd.openxmlformats-officedocument.spreadsheetml.sheetContent-Disposition: attachment ヘッダーを持つバイトを返すサービスを挿入します。 このアプローチは、 .NET 10 の最小限の API または MVC コントローラーで機能します。

完全なチュートリアルについては、 ASP.NET Core Excel エクスポート チュートリアルと、 Blazor WebAssembly またはBlazor Server アプリケーションを構築する場合はBlazorエクスポート チュートリアルを参照してください。

今すぐIronXLを使い始めるにはどうすればいいですか?

IronXL は、Excel 生成のタスクを保守可能なコードに変換します。 その API は、Microsoft Office への依存を排除​​しながら、企業の要件を満たすプロフェッショナルな結果を提供します。 ライブラリの機能セットは、基本的なリストのエクスポートから、スタイルとフォーマットによる複雑なデータ変換まですべてを処理します。

IronXL を使用して、既存のワークブックを読み取って編集したりExcel データを DataTable にエクスポートしてさらに処理したり、概要レポート用の ピボット テーブルを作成したりすることもできます。 これらの機能のいずれかを上記の書式設定オプションと組み合わせると、配布前に手動で調整する必要のないスプレッドシートを作成できます。

IronXLはNuGetで入手でき、 .NET 10、 .NET 8、または.NET Framework 4.6.2+を対象とするすべてのプロジェクトで動作します。 Open XML SDK は、 IronXL が読み取りおよび書き込みを行う XLSX ファイル形式の基盤となるため、生成されたファイルが ECMA-376 標準に準拠し、OOXML と互換性のあるあらゆるアプリケーションで正しく開くことが保証されます。

今IronXLを始めましょう。
green arrow pointer

C# リストを Excel にエクスポートする準備はできましたか? 今すぐIronXLをダウンロードして、 .NETアプリケーションでリスト オブジェクトを Excel に素早く変換できることを体験してください。 実稼働環境での展開では、ニーズに合わせて拡張できる柔軟なライセンス オプションを検討してください。 その他のチュートリアルと例については、ドキュメントをご覧ください。

よくある質問

C#のリストをExcelファイルにエクスポートする方法を教えてください。

IronXLのImportDataメソッドを使用すると、C#のリストをExcelファイルにエクスポートできます。

なぜIronXLを使ってデータをExcelにエクスポートする必要があるのですか?

IronXLは、従来の複雑さを排除し、.NET、.NET Core、または.NET Frameworkとの容易な統合を提供することで、データをExcelにエクスポートするための合理化されたソリューションを提供します。

IronXLを使用するためにMicrosoft Officeをインストールする必要がありますか?

IronXLはMicrosoft Officeのインストールを必要としません。IronXLは独立して動作し、プログラムによってExcelファイルを作成、操作することができます。

IronXLはリスト内の複雑なオブジェクトをExcelにエクスポートできますか?

IronXLは一般的なリストと複雑なオブジェクトの両方を扱うことができ、様々な種類のデータを柔軟にExcelにエクスポートすることができます。

IronXLは.NET Coreに対応していますか?

IronXLは.NET Core、.NET、.NET Frameworkと互換性があり、さまざまな開発環境に対応します。

IronXLのImportDataメソッドを使う利点は何ですか?

IronXLのImportDataメソッドは、C#のリストからExcelへのデータ転送プロセスを簡素化し、コードの複雑さを軽減して生産性を向上させます。

IronXLを使ってProfessionalなスプレッドシートを作成できますか?

IronXLを使用すれば、開発者はListオブジェクトを簡単にプロフェッショナルなスプレッドシートに変換でき、レポートやデータ共有、バックアップに適しています。

IronXLを使用するためのコード例はありますか?

IronXLのドキュメントとチュートリアルでは、一般的なリストや複雑なオブジェクトをExcelにエクスポートするための簡単なコード例を提供しています。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me