IRONSOFTWAREHOME
IRONXLの使用

ASP.NET GridView から Excel ファイルにデータをエクスポートする

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

C#でASP.NET GridViewをExcel XLSXファイルにエクスポートするには、IronXLをインストールし、WorkBookを作成し、GridView行を反復して、それぞれのセルの値を対応するワークシートの位置に書き込み、ワークブックをディスクまたはHTTPレスポンスストリームに保存します。 この方法は、サーバーにMicrosoft Officeをインストールする必要がなく、 .NET Framework、 .NET Core、および.NET 5から.NET 10までのWebアプリケーションで確実に動作します。

GridViewのデータをExcelにエクスポートすることは、EnterpriseASP.NET Web Formsプロジェクトにおける標準的な要件です。 ユーザーは、レポート作成、オフライン分析、およびアーカイブのために、ブラウザから表形式データをスプレッドシートに取り込む必要がある。 課題は、サーバーサイドの.xlsxファイルの間のギャップを埋めることです。特に、Webサーバー環境で破壊されるOffice Interop依存を導入しないようにすることがポイントです。

このガイドは、最小限の行単位のエクスポート、ヘッダーとデータのエクスポート(列の自動サイズ設定付き)、およびレンダリングされたHTMLを完全にバイパスするDataTable駆動エクスポートという、徐々に豊かなエクスポートパターンを順々に説明します。 各例では、C#のトップレベルステートメント互換コードとIronXL APIを使用しています。

ASP.NETプロジェクトにIronXLをインストールするにはどうすればよいですか?

Visual Studioでパッケージ マネージャー コンソールを開き、次を実行します:

PM > Install-Package IronXL.Excel

あるいは、ソリューションエクスプローラーでプロジェクトを右クリックし、NuGetパッケージの管理を選択してIronXLを検索し、インストールをクリックします。 NuGetはすべての推移的依存関係を自動的に解決します。

パッケージがインストールされた後、次のusingディレクティブをコードビハインドファイルに追加します。

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

IronXLは、 .NET Framework 4.6.2以降、および.NET Core 3.1、 .NET 5から.NET 10までをサポートしています。サーバー上でOfficeのインストールやCOM登録は不要です。 完全なAPIドキュメントは、 IronXLオブジェクトリファレンスで入手できます。

どのNuGetパッケージIDを使用すべきですか?

正しいパッケージIDはIronXL.Excelは古いエイリアスです)。 インストール後、アセンブリIronXL.dllが自動的に参照されます。 インストールされたバージョンは、ソリューションエクスプローラーのパッケージノードを確認するか、プロジェクトディレクトリからdotnet list packageを実行して確認できます。

IronXLはASP.NET Core Webアプリケーションで動作しますか?

はい。 同じAPIは、 ASP.NET Web FormsプロジェクトとASP.NET Core (MVCまたはRazor Pages)プロジェクトの両方で動作します。 コアプロジェクトでは、サーバーサイドのファイルパスを構築する際にPath.Combine(Directory.GetCurrentDirectory(), "Exports")に置き換えます。

GridViewをExcelファイルにエクスポートするにはどうすればよいですか?

最も簡単なエクスポートパターンは、GridViewでレンダリングされた各行に反復し、各セルのテキストを対応するExcelワークシートのセルにコピーします。 ASPXマークアップで、<asp:Button ID="btnExport" runat="server" Text="Export to Excel" OnClick="btnExport_Click" />ボタンを追加します。 runat="server"属性により、両方のコントロールはコードビハインドでアクセス可能になります。

コードビハインドは、初回読み込み時にサンプルデータをバインドし、ボタンクリック時にエクスポートします。

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

public partial class GridViewExport : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridView();
        }
    }

    private void BindGridView()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("EmployeeID", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Department", typeof(string));
        dt.Columns.Add("Salary", typeof(decimal));

        dt.Rows.Add(1, "John Smith", "Engineering", 75000);
        dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
        dt.Rows.Add(3, "Michael Chen", "Finance", 70000);

        ViewState["EmployeeData"] = dt;
        gvEmployees.DataSource = dt;
        gvEmployees.DataBind();
    }

    protected void btnExport_Click(object sender, EventArgs e)
    {
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

        // Write header row
        for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
        {
            worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
        }

        // Write data rows
        for (int i = 0; i < gvEmployees.Rows.Count; i++)
        {
            for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
            {
                worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
            }
        }

        string filePath = Server.MapPath("~/Exports/EmployeeData.xlsx");
        workbook.SaveAs(filePath);
    }
}

WorkBook.Create(ExcelFileFormat.XLSX)呼び出しは、最新のOpen XML形式をターゲットにしたメモリ内ワークブックを初期化します。 CreateWorkSheet("Employees")は最初のシートを追加します。 外側のループ(i)はデータ行を進めます; 内側のループ(j)は列を進めます。 行インデックスi + 1がデータセルに使用され、行0のヘッダーが上書きされないようにします。

Excel InteropではなくIronXLを使用する理由とは?

Excel Interopを使用するには、サーバーにMicrosoft Excelのライセンス版がインストールされている必要があり、メモリリークを防ぐために明示的に解放する必要のあるCOMオブジェクトが作成されます。 IronXLは、Open XMLパッケージとしてMarshal.ReleaseComObjectも不要です。 これにより、IIS、Azure App Service、Docker、およびOfficeが利用できないその他のサーバー環境でも信頼性の高い動作を実現します。

XLSXファイルのダウンロードに適したMIMEタイプは何ですか?

ブラウザにファイル保存ダイアログを表示させる場合、インラインでバイトを配信するのではなく、レスポンスのコンテンツタイプをContent-Disposition: attachmentヘッダーを追加します。

列ヘッダーと列の自動サイズ調整を追加するにはどうすればよいですか?

基本例はHeaderRow.Cellsから抽出されたヘッダーを書きますが、プロダクションエクスポートでは、Excelで手動調整なしでデータが読みやすくなるように各列を自動サイズ調整する必要もあります:

protected void btnExport_Click(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

    // Write column headers
    int colCount = gvEmployees.HeaderRow.Cells.Count;
    for (int i = 0; i < colCount; i++)
    {
        string header = gvEmployees.HeaderRow.Cells[i].Text;
        worksheet.SetCellValue(0, i, header);
    }

    // Write data rows
    for (int i = 0; i < gvEmployees.Rows.Count; i++)
    {
        for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
        {
            worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
        }
    }

    // Auto-size each column for readability
    for (int col = 0; col < colCount; col++)
    {
        worksheet.AutoSizeColumn(col);
    }

    string filePath = Server.MapPath("~/Exports/EmployeeReport.xlsx");
    workbook.SaveAs(filePath);
}

AutoSizeColumn(col)は、セル内容の長さに基づいて最適な列幅をIronXLに計算させ、Excelデスクトップアプリケーションでのフォーマット > 列幅の自動調整アクションを反映します。 すべてのデータを書き込んだ後にループ内で呼び出す方が、各行ごとに呼び出すよりも効率的です。なぜなら、その時点で最終的な内容がわかっているからです。

追加のスタイリングオプション -- 太字のヘッダー、背景色、数値形式 -- を探求するには、IronXLセルスタイリングチュートリアルをご覧ください。 複数のカラムにわたるレポートのタイトルを作成するために、セルを結合することもできます。

ヘッダーセルに太字の書式を適用するにはどうすればよいですか?

worksheet["A1"].Style(またはレンジ)から返します。 値を書き込み前後にFont.Bold = trueを設定します - スタイルはセルの内容と切り離されます。

// Bold the entire header row (columns A through D)
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.FontColor = "#FFFFFF";

このパターンは、あらゆるサイズの範囲に一律に適用されます。スタイルプロパティの完全なリストについては、 IronXLスタイリング API リファレンスを参照してください。

データテーブルからデータを直接エクスポートするにはどうすればよいですか?

レンダリングされたGridView行を反復することは、ページング、ソート、列の可視性設定に影響されるたびに、エクスポートをコントロールの現在の視覚的状態に拘束します。 下位のViewStateに保存してエクスポートすると、グリッドの構成に関係なく決定的な結果が得られます。

protected void btnExport_Click(object sender, EventArgs e)
{
    DataTable sourceData = ViewState["EmployeeData"] as DataTable;
    if (sourceData == null)
    {
        Response.Write("No data available to export.");
        return;
    }

    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Report");

    // Column headers from DataTable schema
    for (int i = 0; i < sourceData.Columns.Count; i++)
    {
        worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
    }

    // Data rows from DataRow objects
    for (int i = 0; i < sourceData.Rows.Count; i++)
    {
        for (int j = 0; j < sourceData.Columns.Count; j++)
        {
            worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());
        }
    }

    string filePath = Server.MapPath("~/Exports/DataExport.xlsx");
    workbook.SaveAs(filePath);
}

列名はGridViewテンプレートに適用された表示名のオーバーライドではなく、元のデータスキーマを反映しています。 セル値はstringにキャストされます。

このパターンはDataTableから読み込むとすべてのレコードがエクスポートされます。

大規模なデータテーブルのエクスポートでは何が起こりますか?

IronXLは、大規模なExcelデータセットのワークブックデータを効率的にストリーミングします。 100,000行を超えるエクスポートの場合は、ネストループ内で個々のセルを設定するのではなく、単一のワークシート操作内でResponseストリームに逐次フラッシュすることもできます。

エクスポート時のエラーはどのように処理しますか?

プロダクションエクスポートハンドラーは、catchブロックでIronXL操作をラップし、問題が発生した場合にユーザーに説明メッセージを返すべきです。 共通の失敗モードには、ViewStateがnullになることが含まれます:

protected void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        DataTable sourceData = ViewState["EmployeeData"] as DataTable;
        if (sourceData == null)
            throw new InvalidOperationException("Session data has expired. Please reload the page.");

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

        for (int i = 0; i < sourceData.Columns.Count; i++)
            worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);

        for (int i = 0; i < sourceData.Rows.Count; i++)
            for (int j = 0; j < sourceData.Columns.Count; j++)
                worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());

        string filePath = Server.MapPath("~/Exports/SafeExport.xlsx");
        workbook.SaveAs(filePath);

        lblStatus.Text = "Export successful. File saved to server.";
    }
    catch (Exception ex)
    {
        lblStatus.Text = $"Export failed: {ex.Message}";
    }
}

ファイルをディスクに保存するのではなく、ブラウザの直接ダウンロードとして配信するWebアプリケーションには、Response.OutputStreamに書き込みます。 ~/Exports/ディレクトリが存在し、IISアプリケーションプールIDに書き込み権限があることを確認してください。

XLSXファイルをブラウザからダウンロードできるようにするにはどうすればよいですか?

workbook.SaveAs(filePath)をストリームベースのレスポンスに置き換えます:

using System.IO;

// ... inside btnExport_Click after populating the worksheet ...

byte[] fileBytes;
using (MemoryStream ms = new MemoryStream())
{
    workbook.SaveAs(ms);
    fileBytes = ms.ToArray();
}

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=EmployeeData.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();

このパターンでは、一時ファイルをディスクに書き込むことを回避できます。 byte[]にシリアル化され、クライアントに直接送信されます。 Response.End()呼び出しはレスポンスをフラッシュし、バイナリデータの後に追加ページマークアップが付加されるのを防ぎます。

複数のシートや高度なワークブックをエクスポートするにはどうすればよいですか?

単一のworkbook.CreateWorkSheet(name)を1回呼び出します:

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

WorkSheet summary = workbook.CreateWorkSheet("Summary");
WorkSheet detail  = workbook.CreateWorkSheet("Detail");

// Populate summary sheet ...
// Populate detail sheet ...

workbook.SaveAs(Server.MapPath("~/Exports/FullReport.xlsx"));

IronXLは既存のExcelファイルの読み込みもサポートしているため、ブランドや書式設定済みのテンプレートを読み込み、特定のセルにデータを挿入して、結果を保存することができます。その際、テンプレートに既に含まれているグラフ、画像、スタイルは保持されます。

さらにリッチな出力のために、IronXLはExcelの数式サポート、条件付き書式設定、チャート作成、および画像の埋め込みを提供します。 これらの機能については、 IronXLのチュートリアルセクションに記載されています。

IronXLはEPPlusやClosedXMLと比べてどうですか?

フィーチャーIronXLEPPlusクローズドXML
オフィスへのインストールが必要ですなしなしなし
XLSXファイルの読み書きはいはいはい
XLS(レガシー)サポートはいなしなし
CSV / TSV エクスポートはいなし部分的
チャート作成APIはいはい制限的
ライセンスモデル永久ライセンス + SaaSポリフォーム非商用MIT
.NET 10 のサポートはいはいはい

EPPlusはバージョン5で商用ライセンスに移行したため、既に商用.NETライブラリのエコシステムに投資しているチームにとって、 IronXLは自然な代替手段となった。 ClosedXMLはMITライセンスのままですが、チャートのサポートは限定的です。 正しい選択は、プロジェクトのライセンス制約、必要なExcel機能、およびレガシー.xls形式のサポートが必要かどうかによります。

IronXLはどのようなExcel形式をサポートしていますか?

IronXLは.xlsx(Office Open XML)、.tsv形式を読み書きします。 Excelファイル形式間の変換は、WorkBook.Createで1つのAPI呼び出しで行うか、既存のファイルを読み込み、別の形式で保存することで行えます。

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

IronXLを使用してASP.NET GridViewデータをExcel XLSXファイルにエクスポートするための、本番環境に対応した3つのパターンが利用可能になりました。

  • 行反復エクスポート -- バインドされたGridViewからの動作するエクスポートへの最速のルート -ヘッダーと書式設定のエクスポート-- 見栄えの良いレポートのために、列の自動サイズ調整と太字ヘッダーを追加します
  • DataTable駆動型エクスポート-- ページングまたはフィルタリングされたグリッドの場合、レンダリングされたコントロールを完全にバイパスします

次に取るべき論理的なステップは次のとおりです。

  1. Response.BinaryWriteを使用してブラウザダウンロードレスポンスを追加し、ユーザーがサーバーサイドの保存パスなしで即座にファイルを受け取れるようにします。
  2. セルスタイリングを適用 -- 太字のヘッダー、背景色の塗り、数値形式 -- IronXLのフォーマットAPIを使用します。 3.複数のシートからなるワークブックを活用し、要約データと詳細データを単一のファイルにまとめて関係者に提供する。
  3. ラウンドトリップインポート/エクスポートワークフローのためにIronXLの読み込みAPIを使用してDataTableオブジェクトにExcelファイルを再度読み込みます。
  4. ironsoftware.com/csharp/excel/で**無料トライアルを開始し、**フル機能のトライアルライセンスを使用してプロジェクトですべての機能をテストしてください。

文書生成パイプラインを構築するチームにとって、 IronPDFはIronXLと連携してワークシートを直接PDFにエクスポートできます。 Iron Suiteは、IronXLにIronPDF、 IronOCR、 IronBarcode、 IronZIPをセットにしたお得な価格で提供します。

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