IRONSOFTWAREHOME
IRONXLの使用

IronXLを使用してC#でデータセットをExcelにエクスポート | Officeは不要

Curtis Chau
Curtis Chau
Updated: 2026年6月28日

C# で DataSet または DataTable を Excel にエクスポートすると、構造化されたメモリ内データを、ターゲットマシンに Microsoft Office がインストールされているかどうかに関係なく、Professionalスプレッドシート ファイルに変換する信頼性の高い方法が提供されます。SQL データベースからレコードを取得する場合でも、プログラムで DataSet を構築する場合でも、既存の DataGrid を操作する場合でも、 IronXL はクリーンなコード優先の API を通じてパイプライン全体を処理します。 このガイドでは、トップレベルの C# ステートメントと.NET 10 を使用して、単一テーブルのエクスポートから複数シートのワークブック、ライブデータベースクエリの結果まで、すべての主要なシナリオについて説明します。

IronXLを一度インストールし、数行のコードを書くだけで、Officeに一切依存することなく、データがXLSXファイルに保存されます。 以下のセクションでは、インストール、基本パターン、高度なフォーマット、データベース統合について、ご自身のプロジェクトに直接コピー&ペーストできる形で解説しています。

IronXLをExcelエクスポート用にインストールするにはどうすればよいですか?

エクスポートコードを記述する前に、 NuGetパッケージマネージャーを使用してIronXLをプロジェクトに追加してください。 プロジェクトのルートでターミナルを開いて .NET CLI コマンドを実行するか、Visual Studio のパッケージマネージャーコンソールを使用し、Install-Package コマンドを実行してください。

dotnet add package IronXL.Excel

または Visual Studio パッケージ マネージャ コンソールで:

PM > Install-Package IronXL.Excel

インストール後、 IronXL名前空間をインポートするためのトップレベルのusingステートメントを追加します。

using IronXL;
using System.Data;

IronXLは、.NET 8、 .NET 9、 .NET 10に加え、それ以前 for .NET Frameworkバージョン(4.6.2以降)にも対応しています。 サーバー、デスクトップ、クラウドなど、どのマシンにもOfficeをインストールする必要はありません。 パッケージをインストールすると、XLSX、XLS、CSVファイルの作成、読み取り、書き込みをすべてマネージドコードで行うことができます。

詳細なインストール方法については、IronXLのインストールガイドを参照してください。また、バージョン履歴についてはNuGetパッケージのページをご覧ください。

単一のデータテーブルをExcelファイルにエクスポートするにはどうすればよいですか?

最も一般的なシナリオは、1つのデータテーブルを1つのワークシートにエクスポートすることです。 IronXL の WorkBook および WorkSheet クラスは、Excel オブジェクトモデルに自然にマッピングされます。 ワークブックを作成し、ワークシートを追加してから、データテーブルの列と行を反復処理します。

次の例は、メモリ内で Employees DataTable を作成し、それを EmployeeData.xlsx に書き込みます。

using IronXL;
using System.Data;

// Build an in-memory DataTable
DataTable dt = new DataTable("Employees");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));

dt.Rows.Add(1, "John Smith", "Engineering");
dt.Rows.Add(2, "Sarah Jones", "Marketing");
dt.Rows.Add(3, "Mike Wilson", "Sales");

// Create a workbook and a named worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

// Write column headers in row 0
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}

// Write data rows starting at row 1
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        worksheet.SetCellValue(row + 1, col, dt.Rows[row][col].ToString());
    }
}

workbook.SaveAs("EmployeeData.xlsx");

出力

データセットを Excel VB .NET にエクスポートする方法:IronXL を使用した完全ガイド:画像 1 - VB.NET での単純な DataTable を Excel にエクスポートした出力

SetCellValue は、int、double、string、bool を受け入れるため、ネイティブの Excel セル型を追加のキャストなしで取得できます。 ループパターンは、IronXL が直接メモリに書き込み、SaveAs が呼び出されたときにのみディスクにフラッシュされるため、どんなサイズのテーブルでも機能します。このプロセスは、数千行であっても効率的です。

読み書きのテクニックについてより詳しく知りたい場合は、 IronXLのC#チュートリアルで、このエクスポートパターンに加えて、ファイル操作の全範囲が解説されています。

データセットを複数のExcelワークシートにエクスポートするにはどうすればよいですか?

データセットに製品や注文など、関連する複数のテーブルが含まれている場合、1つのワークブック内で各データテーブルをそれぞれ別のワークシートにマッピングできます。 これにより、受信者は複数の文書を開くことなく、関連するすべてのデータを単一のファイルで確認できるようになります。

以下のループは ds.Tables を反復し、各テーブルごとに 1 つのシートを作成します。

using IronXL;
using System.Data;

// Build a DataSet with two related tables
DataSet ds = new DataSet("CompanyData");

DataTable dtProducts = new DataTable("Products");
dtProducts.Columns.Add("ProductID", typeof(int));
dtProducts.Columns.Add("ProductName", typeof(string));
dtProducts.Columns.Add("Price", typeof(decimal));
dtProducts.Rows.Add(101, "Widget A", 29.99m);
dtProducts.Rows.Add(102, "Widget B", 49.99m);
ds.Tables.Add(dtProducts);

DataTable dtOrders = new DataTable("Orders");
dtOrders.Columns.Add("OrderID", typeof(int));
dtOrders.Columns.Add("Customer", typeof(string));
dtOrders.Columns.Add("Total", typeof(decimal));
dtOrders.Rows.Add(1001, "Acme Corp", 599.90m);
dtOrders.Rows.Add(1002, "Tech Inc", 299.95m);
ds.Tables.Add(dtOrders);

// Create one workbook and iterate each DataTable
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

foreach (DataTable table in ds.Tables)
{
    WorkSheet sheet = workbook.CreateWorkSheet(table.TableName);

    // Write headers
    for (int col = 0; col < table.Columns.Count; col++)
    {
        sheet.SetCellValue(0, col, table.Columns[col].ColumnName);
    }

    // Write rows
    for (int row = 0; row < table.Rows.Count; row++)
    {
        for (int col = 0; col < table.Columns.Count; col++)
        {
            sheet.SetCellValue(row + 1, col, table.Rows[row][col].ToString());
        }
    }
}

workbook.SaveAs("CompanyReport.xlsx");

出力

データセットを Excel VB .NET にエクスポートする方法:IronXL を使用した完全ガイド:画像 2 - エクスポートされた DataSet を個別のワークシートとして持つ生成された Excel ファイル

各ワークシートは元のデータテーブルと同じ名前になっているため、Excel内でのナビゲーションが容易です。 WorkBook.Create がメモリ内でワークブックを確保するため、ファイルを再オープンすることなくループ内でワークシートを追加し続けることができます。IronXL はディスクに書き込む前に、XLSX 構造全体を構築します。

IronXLのWorkBookに関するドキュメントには、シートの並べ替え、パスワード保護、XLSX以外の形式での保存など、WorkBookオブジェクトで利用可能なすべてのメソッドが記載されています。

Excelエクスポートにヘッダー書式を追加するにはどうすればよいですか?

プレーンなデータエクスポートでも機能はしますが、太字のヘッダーと列幅を追加することで、出力結果をビジネス環境ですぐに利用できるようになります。 IronXL は、Style オブジェクトを任意の WorkSheet 範囲に添付することで、セルおよび範囲のスタイリングを提供します。

以下のコードスニペットは、ヘッダー行に太字のフォント書式を適用し、データ書き込み後に列のサイズを自動的に調整します。

using IronXL;
using System.Data;

DataTable dt = new DataTable("Sales");
dt.Columns.Add("Region", typeof(string));
dt.Columns.Add("Q1", typeof(decimal));
dt.Columns.Add("Q2", typeof(decimal));
dt.Columns.Add("Q3", typeof(decimal));
dt.Columns.Add("Q4", typeof(decimal));

dt.Rows.Add("なしrth", 120000m, 135000m, 142000m, 158000m);
dt.Rows.Add("South", 98000m, 104000m, 112000m, 121000m);
dt.Rows.Add("East",  87000m, 93000m,  99000m,  108000m);
dt.Rows.Add("West",  145000m, 152000m, 161000m, 174000m);

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");

// Write and style headers
for (int col = 0; col < dt.Columns.Count; col++)
{
    sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    sheet["A1:E1"].Style.Font.Bold = true;
    sheet["A1:E1"].Style.Font.Height = 12;
}

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

workbook.SaveAs("SalesReport.xlsx");

Style.Font.Bold プロパティは、単一のステートメント内でヘッダー範囲全体に適用されます。 IronXL は、背景色 (Style.BackgroundColor)、境界線スタイル (Style.Border)、数値形式 (Style.NumberFormat.FormatCode)、および水平揃え (Style.HorizontalAlignment)もサポートしています。 スタイルに関する詳細については、IronXLのセル書式設定ガイドを参照してください。

データベースのクエリ結果をExcelにエクスポートするにはどうすればよいですか?

SQLデータベースに接続し、結果をExcelに直接エクスポートする機能は、定期レポート、データスナップショット、管理用エクスポートなど、実際の業務における主要なユースケースに対応しています。 このアプローチは、SqlDataAdapter を使用して DataSet を埋め、結果の DataTable を IronXL ワークシートにマッピングします。

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=SalesDB;Integrated Security=True;";
string query = "SELECT CustomerID, CompanyName, ContactName, Country FROM Customers";

// Fill DataSet from SQL query
DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
    adapter.Fill(ds, "Customers");
}

DataTable dt = ds.Tables["Customers"]!;

// Create workbook and export
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("CustomerData");

// Bold header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
worksheet["A1:D1"].Style.Font.Bold = true;

// Write rows, handling DBNull values safely
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        object cellValue = dt.Rows[row][col];
        worksheet.SetCellValue(row + 1, col,
            cellValue == DBNull.Value ? "" : cellValue.ToString()!);
    }
}

workbook.SaveAs("CustomerExport.xlsx");
Console.WriteLine("Export complete.");

データベースエクスポートの重要ポイント

null ガード (cellValue == DBNull.Value ? "" : cellValue.ToString()) prevents exceptions when the database returns NULL 値 -- オプションの列に一般的に発生します。 ヘッダー行を太字にすることで、レポートの受信者はヘッダーとデータをすぐに区別できます。

C# オブジェクトにExcelからデータを戻し読み込むためのより多くのパターンについては、IronXL DataTableエクスポートチュートリアルがこのワークフローを反転させる方法を示します。

IronXLを他のExcelエクスポート方法と比較するとどうですか?

ライブラリを選択する前に、データセットのエクスポートシナリオにおいて最も重要な領域で、主要な選択肢が互いにどのように比較されるかを理解しておくことが役立ちます。

.NET DataSetシナリオにおけるExcelエクスポートライブラリの比較
アプローチオフィス必須XLSXサポートスタイリングAPI複数枚パフォーマンス(大規模データ)
IronXLなしはい満杯はい高い
Microsoft Office Interopはいはい満杯はい低い
EPPlusなしはい部分的はい高い
ClosedXMLなしはい部分的はい中くらい
CSV(手動)なしなしなしneなし非常に高い

Microsoft Office Interopは、OfficeがインストールされているWindowsマシンでのみ動作するため、サーバー展開やクラウド機能には適用できません。 IronXL、EPPlus、ClosedXMLはいずれもサーバーサイド生成をサポートしており、主な違いはスタイリングAPIの幅広さとライセンスモデルにある。 IronXLのライセンスには商用利用が含まれており、単一のパッケージで全て for .NETターゲットフレームワークをカバーしています。

サードパーティによるベンチマークや比較については、 Excelファイル形式に関するMicrosoftのドキュメントEPPlusプロジェクトページが、プロジェクトに最適な選択をするための追加情報を提供します。

メモリ不足の問題なく大規模なデータセットを処理するにはどうすればよいでしょうか?

数万行のデータテーブルをエクスポートする場合、メモリ使用量を予測可能な範囲に保つことが重要です。 以下のパターンは、まず結果セット全体を DataTable に読み込むのではなく、IDataReader からデータをストリーミングします。これは、リーダーバッファと DataTable の両方を同時に保持する二重メモリコストを避けます。

using IronXL;
using System.Data;
using System.Data.SqlClient;

string connectionString = "Server=localhost;Database=InventoryDB;Integrated Security=True;";
string query = "SELECT ProductID, SKU, Description, StockLevel, UnitCost FROM Products";

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Inventory");

using SqlConnection conn = new SqlConnection(connectionString);
conn.Open();

using SqlCommand cmd = new SqlCommand(query, conn);
using SqlDataReader reader = cmd.ExecuteReader();

// Write schema-derived headers
for (int col = 0; col < reader.FieldCount; col++)
{
    sheet.SetCellValue(0, col, reader.GetName(col));
}

// Stream rows directly into IronXL without buffering a DataTable
int excelRow = 1;
while (reader.Read())
{
    for (int col = 0; col < reader.FieldCount; col++)
    {
        sheet.SetCellValue(excelRow, col,
            reader.IsDBNull(col) ? "" : reader.GetValue(col).ToString()!);
    }
    excelRow++;
}

workbook.SaveAs("InventoryExport.xlsx");
Console.WriteLine($"Exported {excelRow - 1} rows.");

このパターンは、結果セットが 50,000 行を超える可能性がある場合や、メモリに制約のあるサービス内で実行する場合に推奨されます。IronXL のパフォーマンスに関するドキュメントでは、大量のエクスポートを行うための追加のメモリおよびスループットのチューニングオプションについて解説しています。

非常に大規模なエクスポートのためのCSVへの一括保存

メモリ容量が極めて限られている状況で、50万行を超えるエクスポートを行う場合は、出力を複数のワークブックに分割するか、CSV形式でエクスポートすることを検討してください。

using IronXL;

// IronXL can save any workbook as CSV
workbook.SaveAs("LargeExport.csv");

CSV形式は書式設定と複数シートのサポートを失いますが、区切り文字付きの生データを扱う下流のETLプロセスでは引き続き有効です。

Excelファイルを異なる形式や場所に保存するにはどうすればよいですか?

IronXL は、ファイルパス、MemoryStream、および byte[] への保存をサポートしており、これは Excel をダウンロードレスポンスとして返す ASP.NET アプリケーションにとって重要です。

using IronXL;
using System.IO;

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");
sheet.SetCellValue(0, 0, "Generated Report");

// Save to file path
workbook.SaveAs("Report.xlsx");

// Save as XLS (legacy format)
workbook.SaveAs("Report.xls");

// Save to MemoryStream for HTTP response
using MemoryStream ms = new MemoryStream();
workbook.SaveAs(ms);
byte[] fileBytes = ms.ToArray();
// fileBytes can be returned from an ASP.NET controller action

ASP.NET Core の場合、コントローラーアクションから File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx") を返し、ブラウザのダウンロードをトリガーしてください。 IronXL ASP.NET Excelガイドでは、コントローラー統合パターンの全容を紹介しています。

代替となる.NET Excelライブラリの場合、 Open XML SDKは多くのライブラリが構築されているオープンソースの基盤です。

サポートされている出力形式

IronXLは、追加の依存関係なしに以下の形式で保存できます。

  • XLSX -- OpenXML形式、Excel 2007以降に対応
  • XLS -- 従来のバイナリ形式、Excel 97-2003と互換性あり
  • CSV -- カンマ区切り値、広くサポートされています
  • TSV -- タブ区切り値
  • JSON -- 構造化データのエクスポート

形式を切り替えるには、SaveAs パスのファイル拡張子を変更するか、ExcelFileFormat enum 値を受け入れるオーバーロードメソッドを使用します。

エクスポートしたExcelファイルが正しいことを確認するにはどうすればよいですか?

エクスポート後、 IronXLを使用してファイルを読み込み、行数を確認したり、値をスポットチェックしたり、テストプロジェクトで自動アサーションを実行したりできます。

using IronXL;

WorkBook loaded = WorkBook.Load("EmployeeData.xlsx");
WorkSheet sheet = loaded.WorkSheets[0];

// Verify row count (header row + data rows)
int totalRows = sheet.Rows.Count();
Console.WriteLine($"Rows in file: {totalRows}");

// Spot-check specific cell values
string header = sheet["A1"].StringValue;
string firstEmployee = sheet["A2"].StringValue;

Console.WriteLine($"Header: {header}, First row: {firstEmployee}");

この検証パターンは、ファイルを外部システムに送信する前にエクスポートの正しさを確認する必要がある統合テストスイートにおいて特に有用です。 IronXL読み取りチュートリアルは、ファイルの読み込み後に利用可能な読み取り操作の全範囲を示します。

.NETにおける DataSet および DataTable パターンの詳細については、 Microsoft DataSet のドキュメントで ADO .NETオブジェクト モデルが詳しく解説されています。

次のステップは何ですか?

これで、単一のデータテーブルから複数シートのワークブック、データベース駆動型のエクスポート、書式付きヘッダー、大規模データストリーミングまで、C# での主要な DataSet から Excel へのエクスポートシナリオすべてに対応する動作パターンが揃いました。 目標に応じて次のステップに進む方法は次のとおりです。

  • IronXLを無料でお試しください--無料トライアルライセンスから始めて、本番環境に導入する前に、上記の例を自分のデータで実行してみてください。
  • API リファレンス全文をお読みください-- IronXLオブジェクトリファレンスには、WorkBook、WorkSheet、およびセル範囲のすべてのメソッドが記載されています。
  • 関連するエクスポートチュートリアルを探る -- C# DataTable to Excel ガイドはリバースワークフローをカバーしています -- DataTableオブジェクトにExcelを戻して読み取ります。
  • 書式設定オプションを確認する -- IronXLセル書式設定に関するドキュメントには、数値形式、枠線、背景色、および配置オプションが記載されています。 -ライセンスを確認してください。本番環境への導入については、 IronXLのライセンスページを参照して、開発者向け、組織向け、ロイヤリティフリーのオプションから選択してください。 -他のIron Softwareツールと比較してください-- プロジェクトで PDF 生成や OCR も必要な場合は、 Iron Software製品Suiteを使用すると、複数のライブラリを割引価格でバンドルできます。

ここで説明したパターンを基に、スケジュールされたタスクの自動化、 ASP.NET Core のダウンロードエンドポイント、マルチフォーマット出力パイプラインを、Office、COM、 NuGetパッケージ以外のランタイム依存関係を一切必要としないマネージド C# で完全に構築できます。

Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。