IRONSOFTWAREHOME
IRONXLの使用

IronXLを使用して C# で SQL データを Excel にエクスポートする

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

SQL ServerからMicrosoft Excelへのデータのエクスポートは、レポートシステム、データ分析ツール、およびビジネスアプリケーションを構築する.NET開発者にとって一般的な作業です。 このチュートリアルでは、Microsoft Officeのインストールを必要とせずに処理全体を処理する.NET ExcelライブラリであるIronXLを使用して、C#でSQLデータをExcelにエクスポートする方法を説明します。

無料トライアルを開始して、以下のコード例に従ってください。

最初のステップ:
arrow pointer

SQLデータエクスポート用のIronXLはどのようにインストールするのですか?

コードを記述する前に、プロジェクトにIronXLを追加する必要があります。 最も簡単な方法は、Visual Studio のNuGetパッケージ マネージャー コンソールを使用することです。

PM > Install-Package IronXL.Excel

または、 .NET CLI を使用してください。

dotnet add package IronXL.Excel

インストールが完了したら、ファイルの先頭に必要な名前空間を追加します。.NET 10のトップレベルステートメントを使用した場合、設定は次のようになります。

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

IronXLは.NET Standard 2.0以降を対象としているため、追加の設定なしで.NET 10、 .NET Framework、 ASP.NET Core、およびBlazorプロジェクトと連携して動作します。 このパッケージはNuGetで入手できます。

SQLサーバーのデータベースからデータをエクスポートする最良の方法は何ですか?

SQL ServerからExcelファイルへデータをエクスポートする最も効率的な方法は、データベース接続を確立し、DataTableへデータを取得し、IronXLを使用してデータをExcelシートに書き込む3つのステップを含みます。 Microsoftの相互運用ソリューションとは異なり、 IronXLは独立して動作し、COM相互運用オーバーヘッドによるパフォーマンスのボトルネックなしに大規模なデータセットを処理できます。

基本的なパターンは単純明快だ。 SqlDataAdapterは、MicrosoftのADO.NETデータアクセスフレームワークの一部であり、.NET 1.0以来、リレーショナルデータベースからDataTableオブジェクトを埋めるための標準的な方法です。

  1. 接続文字列を用いてSqlConnectionを開く
  2. DataSetを埋める
  3. IronXLのメソッドを呼び出してワークブックを作成し、ワークシートのセルにデータを入力します。
  4. ワークブックを.xlsとして保存する

この方法は、SQL Server 2012以降、Azure SQL Database、Amazon RDS for SQL Server、およびADO.NET互換のデータソースと互換性があります。 コンソールアプリケーションを使用する場合でも、Webベースのレポートツールを使用する場合でも、同じパターンが適用されます。

どのように SQL Server に接続し、データを取得しますか?

SQLデータをエクスポートする前に、接続を確立し、SQLクエリを実行してDataTableを埋める必要があります。 接続文字列には、データへのアクセスに必要なSQL Serverデータベースの認証情報とサーバー情報が含まれています。

次の例では、なしrthwind Customers テーブルに対してクエリを実行し、 IronXL のセル書き込み APIを使用して各行を Excel ワークシートに書き込みます。

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

string connectionString = "Data Source=localhost;Initial Catalog=なしrthwind;Integrated Security=True";
string sql = "SELECT * FROM Customers";

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

SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
DataTable dt = new DataTable();
adapter.Fill(dt);

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Customers");

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

// Write data rows
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("CustomerExport.xlsx");
C#

出力

C#とIronXLを使用してExcelにSQLデータをエクスポートする方法: 画像1 - 生成されたExcelファイル

このコードは、SQL Serverのテーブル構造から適切な形式の列ヘッダーを持つExcelファイルを作成します。 DataTable dtはクエリの結果を格納し、それをゼロベースの行と列のインデックスを使用して、各セルに体系的に書き込みます。 IronXLは、Microsoft Officeアプリケーションと広範な互換性を持つ.xlsx形式の両方をサポートしています。

SQLテーブルにSetCellValueを呼び出す前にセル値を適切にキャストしてください。 数値型を直接渡すことで、Excelのデータ型が保持され、エクスポートされた列に対して並べ替えや数式計算が可能になります。

LoadWorkSheetsFromDataSet を使用して複数のテーブルをエクスポートするにはどうすればよいですか?

レポートが複数のSQLテーブルからデータを必要とする場合、例えば、製品とカテゴリーのテーブルからなら、DataSetにロードし、IronXLが自動的に各テーブルに対してワークシートを作成できます。 これは、DataSetまたはDataTableをExcelにエクスポートするための最も簡潔な方法です。

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

string connectionString = "Data Source=.;Initial Catalog=Inventory;Integrated Security=True";

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

SqlDataAdapter productsAdapter = new SqlDataAdapter("SELECT * FROM Products", connection);
SqlDataAdapter categoriesAdapter = new SqlDataAdapter("SELECT * FROM Categories", connection);

DataSet dataSet = new DataSet();
productsAdapter.Fill(dataSet, "Products");
categoriesAdapter.Fill(dataSet, "Categories");

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);

workBook.SaveAs("InventoryReport.xlsx");

出力

C#とIronXLを使用してExcelにSQLデータをエクスポートする方法: 画像4 - 列ヘッダー付きの生成ファイル

TableNameプロパティを読み取り、一致するワークシートタブを作成します。 DataTableからの列名は各シートのヘッダー行になります。 この方法は、複数の結果セットを返すストアドプロシージャに特に有用です。SqlDataAdapter呼び出しで満たし、すべてを一度にエクスポートすることが可能だからです。

カスタムフォーマットでプログラム的にExcelファイルを作成する必要があるアプリケーションでは、LoadWorkSheetsFromDataSetを呼び出した後にも個々のワークシートにアクセスでき、保存前にスタイル、列幅、または数式を適用できます。

どのようにASP.NETエクスポートボタンを使用してデータをエクスポートできますか?

ウェブアプリケーションの場合、通常はユーザーがボタンをクリックしたときにエクスポート処理が実行されます。 以下のASP.NET Webフォームの例は、ボタンクリックイベントを処理し、SQLクエリからExcelワークブックを構築し、Response.AddHeaderを使用してファイルをダウンロードとしてブラウザに送る方法を示しています。

using IronXL;
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web.UI;

public partial class ExportPage : Page
{
    private void ExportButton_Click(object sender, EventArgs e)
    {
        string connectionString = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True";

        using SqlConnection connection = new SqlConnection(connectionString);
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM Orders", connection);
        DataSet dataSet = new DataSet();
        adapter.Fill(dataSet);

        WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkBook.LoadWorkSheetsFromDataSet(dataSet, workBook);

        byte[] fileBytes = workBook.ToByteArray();
        string filename = "OrdersExport.xlsx";

        Response.Clear();
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.AddHeader("content-disposition", "attachment;filename=" + filename);
        Response.BinaryWrite(fileBytes);
        Response.End();
    }
}

エクスポート ボタンの例

C#とIronXLを使用してExcelにSQLデータをエクスポートする方法: 画像2 - エクスポートボタンのUI例

出力

C#とIronXLを使用してExcelにSQLデータをエクスポートする方法: 画像3 - 生成されたファイル

ToByteArray()メソッドはワークブック全体をメモリ内のバイト配列に変換し、それをHTTPレスポンスストリームに直接書き込むことができます。 これにより、一時ファイルをディスクに書き込むことを回避できます。 Microsoft Interopとは異なり、object misValueプレースホルダーやサーバー上のインストールされたOfficeライセンスが必要ですが、IronXLは管理コードだけで動作し、外部依存関係はありません。

ASP.NET CoreおよびRazor Pagesプロジェクトの場合、コントローラーアクションからreturn File(fileBytes, contentType, filename)と置き換えます。 ASP.NET CoreExcel へのエクスポートパターンは、ワークブックをバイト配列に変換する同じアプローチに従います。

エクスポートしたExcelファイルに書式設定と列ヘッダーを追加するにはどうすればよいですか?

生のSQLエクスポートデータは、エンドユーザーと共有する前に、表示方法を改善する必要がある場合が多い。 IronXL、データがワークシートに書き込まれた後でも、セルスタイル、列幅、数値形式を制御できます。 次の例は、ヘッダー行を太字にし、列幅を自動調整する方法を示しています。

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

string connectionString = "Data Source=localhost;Initial Catalog=Sales;Integrated Security=True";

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

SqlDataAdapter adapter = new SqlDataAdapter("SELECT OrderID, CustomerID, OrderDate, Total FROM Orders", connection);
DataTable dt = new DataTable();
adapter.Fill(dt);

WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet workSheet = workBook.CreateWorkSheet("Orders");

// Write and style header row
for (int col = 0; col < dt.Columns.Count; col++)
{
    workSheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
    workSheet[0, col].Style.Font.Bold = true;
    workSheet[0, col].Style.Font.Height = 12;
}

// Write data rows with type-aware value assignment
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        object value = dt.Rows[row][col];
        if (value is DateTime date)
            workSheet.SetCellValue(row + 1, col, date.ToString("yyyy-MM-dd"));
        else if (value is decimal || value is double || value is int)
            workSheet.SetCellValue(row + 1, col, Convert.ToDouble(value));
        else
            workSheet.SetCellValue(row + 1, col, value.ToString());
    }
}

workBook.SaveAs("FormattedOrdersExport.xlsx");

ヘッダー行を太字と大きなフォントで装飾すると、Excelでエクスポートしたレポートが読みやすくなります。 合計や件数などの数値列に対しては、文字列ではなくdouble値を渡すことで、エクスポートされたデータに対してExcelのネイティブなソートや集計機能が正確に動作します。

セル境界線、背景色、数値形式マスクを含む全体の形式設定オプション範囲をIronXLセルのフォーマットドキュメントで探索することができます。

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

数万行ものデータを含むテーブルでは、メモリ管理が重要になります。 結果セット全体をExcelに書き込む前にSqlDataReaderを直接使用することができます。

大量輸出を行う際には、以下の戦略を検討してください。

  • SQL OFFSET/FETCH を使用したページ分割: 大量のエクスポートを複数のワークシートに分割し、各ワークシートに結果の 1 ページ分を含めます。 これにより、Excelにおける個々のシートサイズを管理しやすい状態に保つことができます。
  • ストリームをディスクへ: すべてをメモリに保持するworkBook.SaveAs(filePath)を呼び出します。
  • 選択した列を制限: SQLサーバーから転送されるデータ量を減らすためにSELECT *を避けます。

C#でDataTableをExcelにエクスポートする最速の方法については、 IronXLブログにさまざまなアプローチとそのメモリプロファイルを比較した専用のベンチマーク記事があります。

DataSetオブジェクトに特に効率的です。 特にDataTableからExcelへのエクスポートシナリオにおいては、この方法は定型コードを削減し、一括書き込みに最適化されています。

ExcelからSQL Serverにデータをインポートするにはどうすればよいですか?

多くのレポート作成アプリケーションにとって、エクスポートワークフローは全体の半分に過ぎない。 ユーザーがテンプレートをダウンロードし、データを入力して、SQL Serverに再アップロードできるようにする必要がある場合もあります。 IronXLを使えば、この双方向ワークフローが簡単に実現できます。

Excelデータをデータベースにインポートするには、アップロードされたファイルをSqlCommandを使用して各行を挿入します。

using IronXL;
using System.Data.SqlClient;

WorkBook workBook = WorkBook.Load("UploadedData.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;

string connectionString = "Data Source=localhost;Initial Catalog=Inventory;Integrated Security=True";

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

// Skip header row, start at row index 1
for (int row = 1; row <= sheet.RowCount; row++)
{
    string productName = sheet[row, 0].StringValue;
    int quantity = (int)sheet[row, 1].DoubleValue;
    decimal price = (decimal)sheet[row, 2].DoubleValue;

    using SqlCommand cmd = new SqlCommand(
        "INSERT INTO Products (Name, Quantity, Price) VALUES (@name, @qty, @price)",
        connection);
    cmd.Parameters.AddWithValue("@name", productName);
    cmd.Parameters.AddWithValue("@qty", quantity);
    cmd.Parameters.AddWithValue("@price", price);
    cmd.ExecuteNonQuery();
}

パラメータ化クエリは、ユーザーが提供したExcelデータを読み取る際に、SQLインジェクション攻撃から保護します。 Microsoft Learn の SqlCommand ドキュメントには、利用可能なすべてのオーバーロードとパラメーターバインディングパターンが網羅されています。 挿入する前に必ずセル値を検証してください。空の文字列、範囲外の数値、予期しないデータ型など、SQL Serverテーブルの制約違反を引き起こす可能性のあるものがないか確認してください。

逆方向の場合、IronXLはデータソースが.xlsxファイルの代わりにカンマ区切り出力を生成するシナリオにおいてC#でCSVファイルを読むこともサポートしています。

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

.NETでSQLデータをExcelにエクスポートするには、いくつかの方法があります。 以下の表は、主なトレードオフをまとめたものです。

.NETにおけるSQLからExcelへのエクスポート方法 ― 機能比較
アプローチオフィス必須データセットのサポート書式設定サーバーセーフ
IronXLなしはい(内蔵)フルスタイル、フォーミュラはい
Microsoft Interopはい手動反復COM経由でフルいいえ(COMサーバー)
EPPlusなし手動反復広範囲にわたるはい
NPOIなし手動反復良いはい
CSV出力なしマニュアルなしneはい

Microsoft Interopは、サーバーにOfficeがインストールされていることを前提としており、サーバー側のWebアプリケーションではサポートされていません。 IronXL、EPPlus、およびNPOIはすべてOfficeなしで動作します。IronXLの利点は、その一流のLoadWorkSheetsFromDataSetで、他のライブラリでは手動で行の反復が必要とされる場合と比べて、エクスポートコードを数行に減らします。

詳細な比較については、 Microsoft Office Interopの代替製品に関する記事を参照してください。

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

C#を使用してSQLデータをExcelにエクスポートするのは、IronXLを使えば簡単です。 ライブラリは、複雑なInterop依存関係を排除し、@--CODE-638--@@、DataSet、および直接のデータベース統合を強力にサポートします。 コンソールアプリケーションの構築であれ、ファイルダウンロード機能を備えたWebベースのレポートシステムの構築であれ、 IronXLはあらゆる.NET 10プロジェクトタイプにおいて、信頼性の高いExcelファイル生成機能を提供します。

この基盤をさらに発展させるために、以下の関連リソースをご覧ください。

本番環境への導入にはライセンスをご購入いただくか、無料トライアルでこのExcelライブラリの全機能を.NETプロジェクトでお試しください。

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日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。