IRONXLの使用 IronXLを使用してC#でデータセットをExcelにエクスポート | Officeは不要 カーティス・チャウ 更新日:2026年3月1日 IronXL をダウンロード NuGet ダウンロード DLL ダウンロード 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる Grokで開く このページについてGrokに質問する 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る 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 # Or in Visual Studio Package Manager Console: # Install-Package IronXl.Excel dotnet add package IronXl.Excel # Or in Visual Studio Package Manager Console: # Install-Package IronXl.Excel SHELL インストール後、 IronXL名前空間をインポートするためのトップレベルのusingステートメントを追加します。 using IronXL; using System.Data; using IronXL; using System.Data; Imports IronXL Imports System.Data $vbLabelText $csharpLabel 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 オブジェクト モデルに自然にマッピングされます。 ワークブックを作成し、ワークシートを追加してから、データテーブルの列と行を反復処理します。 次の例では、メモリ内に従業員データテーブルを作成し、それを 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"); 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"); Imports IronXL Imports System.Data ' Build an in-memory DataTable Dim dt As New DataTable("Employees") dt.Columns.Add("ID", GetType(Integer)) dt.Columns.Add("Name", GetType(String)) dt.Columns.Add("Department", GetType(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 Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees") ' Write column headers in row 0 For col As Integer = 0 To dt.Columns.Count - 1 worksheet.SetCellValue(0, col, dt.Columns(col).ColumnName) Next ' Write data rows starting at row 1 For row As Integer = 0 To dt.Rows.Count - 1 For col As Integer = 0 To dt.Columns.Count - 1 worksheet.SetCellValue(row + 1, col, dt.Rows(row)(col).ToString()) Next Next workbook.SaveAs("EmployeeData.xlsx") $vbLabelText $csharpLabel 出力 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"); 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"); Imports IronXL Imports System.Data ' Build a DataSet with two related tables Dim ds As New DataSet("CompanyData") Dim dtProducts As New DataTable("Products") dtProducts.Columns.Add("ProductID", GetType(Integer)) dtProducts.Columns.Add("ProductName", GetType(String)) dtProducts.Columns.Add("Price", GetType(Decimal)) dtProducts.Rows.Add(101, "Widget A", 29.99D) dtProducts.Rows.Add(102, "Widget B", 49.99D) ds.Tables.Add(dtProducts) Dim dtOrders As New DataTable("Orders") dtOrders.Columns.Add("OrderID", GetType(Integer)) dtOrders.Columns.Add("Customer", GetType(String)) dtOrders.Columns.Add("Total", GetType(Decimal)) dtOrders.Rows.Add(1001, "Acme Corp", 599.90D) dtOrders.Rows.Add(1002, "Tech Inc", 299.95D) ds.Tables.Add(dtOrders) ' Create one workbook and iterate each DataTable Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) For Each table As DataTable In ds.Tables Dim sheet As WorkSheet = workbook.CreateWorkSheet(table.TableName) ' Write headers For col As Integer = 0 To table.Columns.Count - 1 sheet.SetCellValue(0, col, table.Columns(col).ColumnName) Next ' Write rows For row As Integer = 0 To table.Rows.Count - 1 For col As Integer = 0 To table.Columns.Count - 1 sheet.SetCellValue(row + 1, col, table.Rows(row)(col).ToString()) Next Next Next workbook.SaveAs("CompanyReport.xlsx") $vbLabelText $csharpLabel 出力 各ワークシートは元のデータテーブルと同じ名前になっているため、Excel内でのナビゲーションが容易です。 WorkBook.Create はワークブックをメモリに割り当てるため、ファイルを再度開くことなくループ内でワークシートを追加し続けることができます。IronXLはディスクに書き込む前に XLSX 構造全体を構築します。 IronXLのWorkBookに関するドキュメントには、シートの並べ替え、パスワード保護、XLSX以外の形式での保存など、WorkBookオブジェクトで利用可能なすべてのメソッドが記載されています。 Excelエクスポートにヘッダー書式を追加するにはどうすればよいですか? プレーンなデータエクスポートでも機能はしますが、太字のヘッダーと列幅を追加することで、出力結果をビジネス環境ですぐに利用できるようになります。 IronXL は、任意の WorkSheet 範囲に添付された Style オブジェクトを介して、セルと範囲のスタイルを公開します。 以下のコードスニペットは、ヘッダー行に太字のフォント書式を適用し、データ書き込み後に列のサイズを自動的に調整します。 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("North", 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"); 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("North", 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"); Imports IronXL Imports System.Data Dim dt As New DataTable("Sales") dt.Columns.Add("Region", GetType(String)) dt.Columns.Add("Q1", GetType(Decimal)) dt.Columns.Add("Q2", GetType(Decimal)) dt.Columns.Add("Q3", GetType(Decimal)) dt.Columns.Add("Q4", GetType(Decimal)) dt.Rows.Add("North", 120000D, 135000D, 142000D, 158000D) dt.Rows.Add("South", 98000D, 104000D, 112000D, 121000D) dt.Rows.Add("East", 87000D, 93000D, 99000D, 108000D) dt.Rows.Add("West", 145000D, 152000D, 161000D, 174000D) Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) Dim sheet As WorkSheet = workbook.CreateWorkSheet("Sales") ' Write and style headers For col As Integer = 0 To dt.Columns.Count - 1 sheet.SetCellValue(0, col, dt.Columns(col).ColumnName) sheet("A1:E1").Style.Font.Bold = True sheet("A1:E1").Style.Font.Height = 12 Next ' Write data rows For row As Integer = 0 To dt.Rows.Count - 1 For col As Integer = 0 To dt.Columns.Count - 1 sheet.SetCellValue(row + 1, col, dt.Rows(row)(col)) Next Next workbook.SaveAs("SalesReport.xlsx") $vbLabelText $csharpLabel 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."); 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."); Imports IronXL Imports System.Data Imports System.Data.SqlClient Dim connectionString As String = "Server=localhost;Database=SalesDB;Integrated Security=True;" Dim query As String = "SELECT CustomerID, CompanyName, ContactName, Country FROM Customers" ' Fill DataSet from SQL query Dim ds As New DataSet() Using connection As New SqlConnection(connectionString) Dim adapter As New SqlDataAdapter(query, connection) adapter.Fill(ds, "Customers") End Using Dim dt As DataTable = ds.Tables("Customers") ' Create workbook and export Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) Dim worksheet As WorkSheet = workbook.CreateWorkSheet("CustomerData") ' Bold header row For col As Integer = 0 To dt.Columns.Count - 1 worksheet.SetCellValue(0, col, dt.Columns(col).ColumnName) Next worksheet("A1:D1").Style.Font.Bold = True ' Write rows, handling DBNull values safely For row As Integer = 0 To dt.Rows.Count - 1 For col As Integer = 0 To dt.Columns.Count - 1 Dim cellValue As Object = dt.Rows(row)(col) worksheet.SetCellValue(row + 1, col, If(cellValue Is DBNull.Value, "", cellValue.ToString())) Next Next workbook.SaveAs("CustomerExport.xlsx") Console.WriteLine("Export complete.") $vbLabelText $csharpLabel データベースエクスポートの重要ポイント null ガード (cellValue == DBNull.Value ? "" : cellValue.ToString()) prevents exceptions when the database returns NULL 値 -- オプション列でよく発生する現象。 ヘッダー行を太字にすることで、レポートの受信者はヘッダーとデータをすぐに区別できます。 ExcelからC#オブジェクトにデータを読み戻す際のその他のパターンについては、 IronXL DataTableのエクスポートチュートリアルで、このワークフローを逆にする方法が説明されています。 IronXLを他のExcelエクスポート方法と比較するとどうですか? ライブラリを選択する前に、データセットのエクスポートシナリオにおいて最も重要な領域で、主要な選択肢が互いにどのように比較されるかを理解しておくことが役立ちます。 .NET DataSetシナリオにおけるExcelエクスポートライブラリの比較 アプローチ オフィス必須 XLSXサポート スタイリングAPI 複数枚 パフォーマンス(大規模データ) IronXL なし はい 満杯 はい 高い Microsoft Office Interop はい はい 満杯 はい 低い EPPlus なし はい 部分的 はい 高い ClosedXML なし はい 部分的 はい 中くらい CSV(手動) なし なし 該当なし なし 非常に高い 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."); 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."); Imports IronXL Imports System.Data Imports System.Data.SqlClient Dim connectionString As String = "Server=localhost;Database=InventoryDB;Integrated Security=True;" Dim query As String = "SELECT ProductID, SKU, Description, StockLevel, UnitCost FROM Products" Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) Dim sheet As WorkSheet = workbook.CreateWorkSheet("Inventory") Using conn As New SqlConnection(connectionString) conn.Open() Using cmd As New SqlCommand(query, conn) Using reader As SqlDataReader = cmd.ExecuteReader() ' Write schema-derived headers For col As Integer = 0 To reader.FieldCount - 1 sheet.SetCellValue(0, col, reader.GetName(col)) Next ' Stream rows directly into IronXL without buffering a DataTable Dim excelRow As Integer = 1 While reader.Read() For col As Integer = 0 To reader.FieldCount - 1 sheet.SetCellValue(excelRow, col, If(reader.IsDBNull(col), "", reader.GetValue(col).ToString())) Next excelRow += 1 End While workbook.SaveAs("InventoryExport.xlsx") Console.WriteLine($"Exported {excelRow - 1} rows.") End Using End Using End Using $vbLabelText $csharpLabel 結果セットが50,000行を超える可能性がある場合、またはメモリ制約のあるサービス内で実行する場合に、このパターンが推奨されます。IronXL のパフォーマンスに関するドキュメントには、大量のエクスポートにおけるメモリとスループットのチューニングオプションに関する詳細な説明が記載されています。 非常に大規模なエクスポートのためのCSVへの一括保存 メモリ容量が極めて限られている状況で、50万行を超えるエクスポートを行う場合は、出力を複数のワークブックに分割するか、CSV形式でエクスポートすることを検討してください。 using IronXL; // IronXL can save any workbook as CSV workbook.SaveAs("LargeExport.csv"); using IronXL; // IronXL can save any workbook as CSV workbook.SaveAs("LargeExport.csv"); Imports IronXL ' IronXL can save any workbook as CSV workbook.SaveAs("LargeExport.csv") $vbLabelText $csharpLabel 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 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 Imports IronXL Imports System.IO Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX) Dim sheet As WorkSheet = 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 ms As New MemoryStream() workbook.SaveAs(ms) Dim fileBytes As Byte() = ms.ToArray() ' fileBytes can be returned from an ASP.NET controller action End Using $vbLabelText $csharpLabel 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 列挙値を受け入れるオーバーロードされたメソッドを使用することで、フォーマットを切り替えます。 エクスポートした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}"); 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}"); Imports IronXL Dim loaded As WorkBook = WorkBook.Load("EmployeeData.xlsx") Dim sheet As WorkSheet = loaded.WorkSheets(0) ' Verify row count (header row + data rows) Dim totalRows As Integer = sheet.Rows.Count() Console.WriteLine($"Rows in file: {totalRows}") ' Spot-check specific cell values Dim header As String = sheet("A1").StringValue Dim firstEmployee As String = sheet("A2").StringValue Console.WriteLine($"Header: {header}, First row: {firstEmployee}") $vbLabelText $csharpLabel この検証パターンは、ファイルを外部システムに送信する前にエクスポートの正しさを確認する必要がある統合テストスイートにおいて特に有用です。 IronXLの読み込みチュートリアルでは、ファイルを読み込んだ後に利用できるすべての読み込み操作を紹介しています。 .NETにおける DataSet および DataTable パターンの詳細については、 Microsoft DataSet のドキュメントで ADO .NETオブジェクト モデルが詳しく解説されています。 次のステップは何ですか? これで、単一のデータテーブルから複数シートのワークブック、データベース駆動型のエクスポート、書式付きヘッダー、大規模データストリーミングまで、C# での主要な DataSet から Excel へのエクスポートシナリオすべてに対応する動作パターンが揃いました。 目標に応じて次のステップに進む方法は次のとおりです。 IronXLを無料でお試しください--無料トライアルライセンスから始めて、本番環境に導入する前に、上記の例を自分のデータで実行してみてください。 API リファレンス全文をお読みください-- IronXLオブジェクトリファレンスには、WorkBook、WorkSheet、およびセル範囲のすべてのメソッドが記載されています。 -関連するエクスポートチュートリアルをご覧ください-- C# DataTable から Excel へのガイドでは、逆のワークフロー、つまり Excel から DataTable オブジェクトに読み戻す方法について説明しています。 -書式設定オプションを確認する-- IronXLのセル書式設定に関するドキュメントには、数値形式、罫線、背景色、配置オプションが記載されています。 -ライセンスを確認してください。本番環境への導入については、 IronXLのライセンスページを参照して、開発者向け、組織向け、ロイヤリティフリーのオプションから選択してください。 -他のIron Softwareツールと比較してください-- プロジェクトで PDF 生成や OCR も必要な場合は、 Iron Software製品Suiteを使用すると、複数のライブラリを割引価格でバンドルできます。 ここで説明したパターンを基に、スケジュールされたタスクの自動化、 ASP.NET Core のダウンロードエンドポイント、マルチフォーマット出力パイプラインを、Office、COM、 NuGetパッケージ以外のランタイム依存関係を一切必要としないマネージド C# で完全に構築できます。 よくある質問 C# で DataSet を Excel にエクスポートするにはどうすればよいですか? IronXLライブラリを使用すると、C# で DataSet を Excel にエクスポートできます。このライブラリは、Microsoft Office を必要とせずに Excel ファイルを作成、編集、操作するためのコード ファースト API を提供します。 IronXLを使用するためにMicrosoft Officeをインストールする必要がありますか? いいえ、 IronXL、Excel ファイルをエクスポートまたは操作するために、マシンに Microsoft Office がインストールされている必要はありません。 IronXLを使用してエクスポートできるデータの種類は何ですか? IronXL を使用すると、DataTables や DataSet などの構造化データのほか、SqlDataReader やその他の ADO .NETソースからのデータを Excel ファイルにエクスポートできます。 IronXL はExcel ファイルの作成と編集を処理できますか? はい、 IronXL はC# でプログラム的に Excel ファイルを作成、編集、操作する機能を提供します。 IronXL はサーバー側およびクラウド アプリケーションに適していますか? はい、 IronXL は、Office をインストールせずに Excel ファイルを生成する必要があるサーバー側アプリケーションやクラウド機能に最適です。 DataSet をエクスポートするためにIronXLを使用する利点は何ですか? IronXL は、Microsoft Office などの外部依存なしに Excel ファイルの作成と操作を処理し、XLSX、XLS、CSV 形式をサポートし、すべて for .NETターゲット フレームワークで動作します。 IronXL をASP.NET Coreで使用して Excel のダウンロードを返すことはできますか? はい、 IronXL はワークブックを MemoryStream に保存でき、結果のバイト配列はASP.NET Coreコントローラー アクションからファイルのダウンロードとして返すことができます。 IronXL は大規模な DataSet をサポートしていますか? はい、 IronXL は完全な DataTable をバッファリングせずに SqlDataReader から直接データをストリーミングできるため、大規模な結果セットのメモリ使用量を予測可能に保つことができます。 IronXL はどのような Excel 形式での保存をサポートしていますか? IronXL は、追加の依存関係なしで、XLSX、XLS、CSV、TSV、JSON 形式への保存をサポートします。 Excel にエクスポートするときに太字のヘッダーなどの書式を適用できますか? はい、 IronXL は、太字フォント、背景色、境界線、数値形式、配置用のセル範囲のスタイル API を提供します。 カーティス・チャウ 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 2026年3月1日 ASP .NET C# で Excel ファイルをダウンロード: XLSX、CSV などにデータをエクスポート C#とIronXLを使用して、 ASP.NET CoreでExcelファイルをダウンロードします。MVCコントローラーからMemoryStreamとFile()を使用して、XLSX、CSV、XML形式でデータをエクスポートします。コード例も含まれています。 詳しく読む 更新日 2026年3月1日 IronXLを使用してBlazorで Excel ファイルをエクスポートする方法 IronXLを使用してBlazor Server アプリケーションから Excel にデータをエクスポートする方法を学びます。このガイドでは、プロジェクトのセットアップ、サービス設計、条件付き書式、複数シートのレポート、エラー処理について、完全な C# コード例とともに説明します。 詳しく読む 更新日 2026年2月27日 StreamReader の代わりに C# で Excel ファイルを読み取る方法 StreamReader が Excel ファイルを読み取れない理由と、 IronXL を使用して C# .NETのディスクまたはメモリ ストリームから XLSX および XLS ワークブックを読み込む方法について説明します。 詳しく読む C# で GridView を書式付きで Excel にエクスポートする方法Interop とIronXLを使用して C#...
更新日 2026年3月1日 ASP .NET C# で Excel ファイルをダウンロード: XLSX、CSV などにデータをエクスポート C#とIronXLを使用して、 ASP.NET CoreでExcelファイルをダウンロードします。MVCコントローラーからMemoryStreamとFile()を使用して、XLSX、CSV、XML形式でデータをエクスポートします。コード例も含まれています。 詳しく読む
更新日 2026年3月1日 IronXLを使用してBlazorで Excel ファイルをエクスポートする方法 IronXLを使用してBlazor Server アプリケーションから Excel にデータをエクスポートする方法を学びます。このガイドでは、プロジェクトのセットアップ、サービス設計、条件付き書式、複数シートのレポート、エラー処理について、完全な C# コード例とともに説明します。 詳しく読む
更新日 2026年2月27日 StreamReader の代わりに C# で Excel ファイルを読み取る方法 StreamReader が Excel ファイルを読み取れない理由と、 IronXL を使用して C# .NETのディスクまたはメモリ ストリームから XLSX および XLS ワークブックを読み込む方法について説明します。 詳しく読む