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

IronXL を使用して GridView を Excel XLSX C# にエクスポートする

ASP.NET GridView から Excel ファイルへのデータのエクスポート

ASP.NET GridViewからExcelファイルへのデータのエクスポートは、.NET Frameworkアプリケーションだけでなく、最新の.NETアプリケーションでも一般的な要件です。ASP.NET Webフォームでは、エクスポート機能を実行するためにasp:Buttonなどのサーバーコントロールを使用してエクスポートを開始することがよくあります。 経営陣向けのレポートを生成する場合、関係者とデータセットを共有する場合、またはエンドユーザー向けにダウンロード可能なスプレッドシートを作成する場合、開発者は、GridView のコンテンツを、データの整合性と構造を維持する適切にフォーマットされた.XLSXファイルに変換する信頼できる方法を必要とします。

この記事では、Excel ファイル作成用の強力な .NET ライブラリであるIronXLを使用してこのエクスポート プロセスを実行する方法について説明します。 MS Excel のインストールが必要で、Web サーバー環境で苦労する Excel Interop アプローチとは異なり、IronXL は純粋にコードを使用してネイティブ Excel ドキュメントを生成します。 ライブラリは、サーバー上に Microsoft Office を必要とせずに.XLSX.XLS 、および CSV 出力形式を処理します。 IronXL、Syncfusion XlsIO、LargeXlsx も大規模なデータセットの処理に適しており、Microsoft Office を必要とせずに強力な機能を提供します。

このガイドでは、完全な実用的なコード例とともに、IronXL を使用して GridView を Excel XLSX C# にエクスポートする方法を説明します。 各例には、 object/byval senderEventArgs eパラメーターを含む完全なクラス構造、開発者が実装と基礎となる概念の両方を理解するのに役立つ詳細な説明、および次の Visual Studio プロジェクトに役立つ実用的な手法が含まれています。 Web アプリケーションの場合、 .XLSXファイルを配信するときに、ブラウザーがファイルのダウンロードをトリガーするように、応答 MIME タイプをapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetに設定することを忘れないでください。

GridView のエクスポートの概要

GridView を Excel ファイルにエクスポートすることは、特にユーザーがアプリケーション外部でデータを分析、共有、またはアーカイブする必要がある場合に、最新の Web アプリケーションで頻繁に必要になります。 GridView データを Excel ファイルに変換することで、Microsoft Excel へのシームレスなインポートが可能になり、ユーザーは使い慣れた環境でデータを簡単に操作できるようになります。 この記事では、さまざまな .NET Web プロジェクトで機能する実用的なソリューションに焦点を当て、GridView を Excel ファイルにエクスポートするための最も効果的な方法について説明します。

プログラムで GridView データを Excel シートにエクスポートするにはどうすればよいですか?

プログラムによって GridView データを Excel ワークシートにエクスポートするには、コントロールからバインドされたデータを抽出し、それを Excel ワークブック構造に書き込む必要があります。 IronXL は、Open XML スプレッドシート形式の複雑さを内部的に処理する直感的な API を提供することで、このエクスポート プロセスを簡素化します。 開発者は、XML スキーマを直接扱うのではなく、ワークブック、ワークシート、行、列などの使い慣れた概念を扱います。

// Quick example: Create an Excel file with IronXL
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Data");
worksheet["A1"].Value = "Hello from IronXL";
workbook.SaveAs("output.xlsx");
// Quick example: Create an Excel file with IronXL
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Data");
worksheet["A1"].Value = "Hello from IronXL";
workbook.SaveAs("output.xlsx");
$vbLabelText   $csharpLabel

注: VB.NET では、通常、 Dim workbookおよびDim worksheetステートメントを使用して、ワークブックとワークシートのオブジェクト初期化が行われます。 これらは、上記の C# オブジェクトの作成に対応しており、 WorkBook workbookWorkSheet worksheetを使用して Excel オブジェクトを作成および構成します。

出力

! IronXL を使用して GridView を Excel XLSX C# にエクスポート: 画像 1 - Excel 出力

ASP.NET プロジェクトで IronXL をセットアップするにはどうすればよいですか?

Visual Studio の NuGet パッケージ マネージャーを使用すると、IronXL のインストールには数秒しかかかりません。 パッケージ マネージャー コンソールを開き、次のコードを実行します。

Install-Package IronXL.Excel
Install-Package IronXL.Excel
SHELL

! IronXL を使用して GridView を Excel XLSX C# にエクスポート: 画像 2 - インストール

または、ソリューション エクスプローラーでプロジェクトを右クリックし、"NuGet パッケージの管理"を選択して、"IronXL"を検索し、"インストール"をクリックします。 パッケージは、必要なすべての参照と依存関係をプロジェクトに自動的に追加します。 IronXL は、 .NET Framework アプリケーション(4.6.2 以降) に加えて、.NET Core および .NET 5/6/7/8 をサポートしており、さまざまなプロジェクト タイプや Web フォーム構成に柔軟に対応できます。

インストール後、コード ビハインド ファイルに、IronXL 名前空間と System 名前空間を追加します。

using System;
using System.Data;
using IronXL;
using System;
using System.Data;
using IronXL;
$vbLabelText   $csharpLabel

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

次のコードは、ユーザーがエクスポート ボタンをクリックしたときに、ASP.NET GridView コントロールを Excel ファイルにエクスポートする方法を示しています。 この例では、Web フォーム アプリケーションに典型的な完全なクラス構造を使用します。

まず、ASPXマークアップは<asp:GridView>そして<asp:Button>標準の ASP.NET コントロールであるrunat=&quot;server&quot;属性を使用します。

<asp:GridView ID="gvEmployees" runat="server" AutoGenerateColumns="true">
</asp:GridView>
<asp:Button ID="btnExport" runat="server" Text="Export to Excel" OnClick="btnExport_Click" />
<asp:GridView ID="gvEmployees" runat="server" AutoGenerateColumns="true">
</asp:GridView>
<asp:Button ID="btnExport" runat="server" Text="Export to Excel" OnClick="btnExport_Click" />
XML

コード ビハインド ファイルには、データ バインディング メソッドとエクスポート ロジックが含まれています。

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()
    {
        // Create new DataTable as data source
        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)
    {
        // Create new Excel workbook and worksheet
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
        for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
        {
            worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
        }
        // Export GridView data to Excel worksheet
        for (int i = 0; i < gvEmployees.Rows.Count; i++)
        {
            for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
            {
                string cellValue = gvEmployees.Rows[i].Cells[j].Text;
                worksheet.SetCellValue(i + 1, j, cellValue);
            }
        }
        // Save Excel file to server path
        string filename = Server.MapPath("~/Exports/EmployeeData.xlsx");
        workbook.SaveAs(filename);
    }
}
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()
    {
        // Create new DataTable as data source
        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)
    {
        // Create new Excel workbook and worksheet
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
        for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
        {
            worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
        }
        // Export GridView data to Excel worksheet
        for (int i = 0; i < gvEmployees.Rows.Count; i++)
        {
            for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
            {
                string cellValue = gvEmployees.Rows[i].Cells[j].Text;
                worksheet.SetCellValue(i + 1, j, cellValue);
            }
        }
        // Save Excel file to server path
        string filename = Server.MapPath("~/Exports/EmployeeData.xlsx");
        workbook.SaveAs(filename);
    }
}
$vbLabelText   $csharpLabel

この実装では、エクスポート ボタンがクリックされたときに新しいWorkBookインスタンスが作成されます。 ネストされたループは、行インデックスとしてint iを使用して各 GridView 行を反復処理し、 SetCellValue メソッドを使用して対応する Excel ワークシートの位置にセル値を書き込みます。

出力

! IronXL を使用して GridView を Excel XLSX C# にエクスポート: 画像 3 - GridView 出力

! IronXL を使用して GridView を Excel XLSX C# にエクスポート: 画像 4 - GridView から Excel への出力

VB.NET では、このエクスポート ロジックは通常、 Subで始まりEnd Subで終わる DataTable 駆動型プロシージャ内に存在し、従来の ASP.NET Web フォーム プロジェクトで使用される使い慣れたデータテーブル end sub 構造を強化します。

列ヘッダーと基本的な書式設定を追加するにはどうすればいいですか?

前の例では、データ行はエクスポートされますが、列ヘッダーは省略されます。 この拡張バージョンには、GridView から抽出されたヘッダーが含まれており、出力 Excel ファイルの読みやすさを向上させるために基本的な書式設定が適用されます。

protected void btnExport_Click(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
    // Write column headers from GridView to Excel sheet
    int columnCount = gvEmployees.HeaderRow.Cells.Count;
    for (int i = 0; i < columnCount; i++)
    {
        string headerText = gvEmployees.HeaderRow.Cells[i].Text;
        worksheet.SetCellValue(0, i, headerText);
    }
    // Write data rows starting from row 1
    int rowCount = gvEmployees.Rows.Count;
    for (int i = 0; i < rowCount; i++)
    {
        for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
        {
            string cellValue = gvEmployees.Rows[i].Cells[j].Text;
            worksheet.SetCellValue(i + 1, j, cellValue);
        }
    }
    // Apply column auto-fit formatting for better display
    worksheet.AutoSizeColumn(0);
    worksheet.AutoSizeColumn(1);
    worksheet.AutoSizeColumn(2);
    worksheet.AutoSizeColumn(3);
    string filename = Server.MapPath("~/Exports/EmployeeReport.xlsx");
    workbook.SaveAs(filename);
}
protected void btnExport_Click(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
    // Write column headers from GridView to Excel sheet
    int columnCount = gvEmployees.HeaderRow.Cells.Count;
    for (int i = 0; i < columnCount; i++)
    {
        string headerText = gvEmployees.HeaderRow.Cells[i].Text;
        worksheet.SetCellValue(0, i, headerText);
    }
    // Write data rows starting from row 1
    int rowCount = gvEmployees.Rows.Count;
    for (int i = 0; i < rowCount; i++)
    {
        for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
        {
            string cellValue = gvEmployees.Rows[i].Cells[j].Text;
            worksheet.SetCellValue(i + 1, j, cellValue);
        }
    }
    // Apply column auto-fit formatting for better display
    worksheet.AutoSizeColumn(0);
    worksheet.AutoSizeColumn(1);
    worksheet.AutoSizeColumn(2);
    worksheet.AutoSizeColumn(3);
    string filename = Server.MapPath("~/Exports/EmployeeReport.xlsx");
    workbook.SaveAs(filename);
}
$vbLabelText   $csharpLabel

HeaderRowプロパティは、Excel ワークシートの行 0 に書き込まれる GridView の列ヘッダーへのアクセスを提供します。 次に、データ行が 1 行目から入力されます ( SetCellValue呼び出しのi + 1オフセットに注意してください)。 このオフセットは、ヘッダー行がデータで上書きされるのを防ぐために不可欠です。

ViewState を使用してデータをエクスポートするにはどうすればよいですか?

GridViewコントロールがDataTableにバインドされている場合、 DataSourceに直接アクセスすると、ユーザー インターフェイスの HTML 要素を反復処理するよりもクリーンなコードと優れたパフォーマンスが実現します。

protected void btnExport_Click(object sender, EventArgs e)
{
    // Cast DataSource to DataTable
    DataTable sourceData = ViewState["EmployeeData"] as DataTable;
    if (sourceData == null)
        return; // or show error
    // In VB.NET, this would be declared as: Dim dt As DataTable
    // Create new workbook and worksheet
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Report");
    // Write headers from DataTable columns
    for (int i = 0; i < sourceData.Columns.Count; i++)
    {
        worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
    }
    // Write data rows to Excel
    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 filename = Server.MapPath("~/Exports/DataExport.xlsx");
    workbook.SaveAs(filename);
}
protected void btnExport_Click(object sender, EventArgs e)
{
    // Cast DataSource to DataTable
    DataTable sourceData = ViewState["EmployeeData"] as DataTable;
    if (sourceData == null)
        return; // or show error
    // In VB.NET, this would be declared as: Dim dt As DataTable
    // Create new workbook and worksheet
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Report");
    // Write headers from DataTable columns
    for (int i = 0; i < sourceData.Columns.Count; i++)
    {
        worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
    }
    // Write data rows to Excel
    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 filename = Server.MapPath("~/Exports/DataExport.xlsx");
    workbook.SaveAs(filename);
}
$vbLabelText   $csharpLabel

この方法では、 DataTableColumnsコレクションから列名を直接抽出し、 DataRowオブジェクトからセル値を取得します。 基になるデータ ソースを操作すると、 GridViewレンダリングへの依存がなくなり、コントロールの表示状態、ページング構成、または既定の表示設定に関係なく、一貫した結果が得られます。

出力

! IronXL を使用して GridView を Excel XLSX C# にエクスポート: 画像 5 - ViewState 出力を使用してエクスポート

大規模なデータセットやデータのインポート操作を伴うシナリオでは、IronXL はメモリの問題なしに数千の行を処理する効率的なワークシート操作をサポートします。 ライブラリは、データ処理ワークフロー用に既存の Excel ファイルを読み込んで読み取ることもできます。

エラーと出力の処理

GridView Excel ファイルにエクスポートする場合、エクスポート プロセスが信頼性が高く、ユーザーフレンドリーであることを確認することが重要です。 エラーは、ファイルの権限の問題、無効なデータ、予期しない例外など、さまざまな理由で発生する可能性があるため、堅牢なエラー処理が不可欠です。 エクスポート ロジックを try-catch ブロックでラップすることで、発生する問題を適切に処理し、ユーザーに明確なフィードバックを提供できます。

さらに、エクスポート プロセスの出力をカスタマイズすると、ユーザー エクスペリエンスが向上します。 ファイル名を指定し、適切なファイル形式を選択し、コンテンツ配置を設定して、Excel ファイルがユーザーに配信される方法 (ダウンロード添付ファイルとしてなど) を制御できます。

次のコードは、 GridViewを Excel ファイルにエクスポートするときにエラーと出力を処理する方法を示しています。

try
{
    // Export GridView to Excel file
    GridViewExport.ExcelExport(GridView1, "ExportedData");
    Response.Write("Export successful! Your Excel file is ready.");
}
catch (Exception ex)
{
    // Handle exception and inform the user
    Response.Write("Error exporting data: " + ex.Message);
}
try
{
    // Export GridView to Excel file
    GridViewExport.ExcelExport(GridView1, "ExportedData");
    Response.Write("Export successful! Your Excel file is ready.");
}
catch (Exception ex)
{
    // Handle exception and inform the user
    Response.Write("Error exporting data: " + ex.Message);
}
$vbLabelText   $csharpLabel

この例では、エクスポート プロセスは try-catch ブロックでラップされています。 エクスポートが成功すると、ユーザーに確認メッセージが表示されます。 エラーが発生した場合、catch ブロックは例外をキャプチャし、エラー メッセージを出力して、ユーザーにエクスポートのステータスが通知されるようにします。 ファイル名、ファイルの種類、コンテンツ配置ヘッダーを設定して、ダウンロード中に Excel ファイルがユーザーにどのように表示されるかを制御することで、出力をさらにカスタマイズできます。

結論

IronXL を使用すると、ASP.NET GridViewデータを Excel ファイルにエクスポートすることが簡単になります。 ライブラリは、サーバー上の MS Excel または Microsoft Office に依存することなく、ワークブックの作成、セルの作成、およびファイルの生成を処理します。 このため、IronXL は、サーバー側での Excel 生成がさまざまなホスティング環境間で確実に動作する必要がある Web アプリケーションに特に適しています。

この記事の例では、基本的なエクスポートから列ヘッダーや書式設定の追加まで段階的に構築する方法を示します。 最後の例に示すDataTableアプローチは、 GridView構成に関係なくデータの整合性を確保しながら、運用中の .NET アプリケーションに最も堅牢なソリューションを提供します。 IronXL の包括的な機能セットは、既存の Excel ファイルの読み取り、数式の操作、より複雑なレポート シナリオのための複数のワークシートの管理もサポートします。 ライブラリは XLSX および XLS 形式をネイティブに処理し、必要に応じて CSV 出力を書き込むこともできます。

今すぐ無料トライアルを開始して、ASP.NET アプリケーションにGridViewから Excel へのエクスポートを実装してください。 実稼働環境で使用する場合は、専用サポート付きの永久ライセンスを含むIronXL ライセンス オプションを検討してください。

よくある質問

GridView を Excel にエクスポートするために IronXL を使用する主な目的は何ですか?

IronXL は主に、ASP.NET GridView から XLSX などの Excel 形式へのデータのエクスポートを容易にするために使用され、C# アプリケーションでの高パフォーマンスと統合の容易さを保証します。

IronXL は GridView からエクスポートするときに大きなデータセットを処理できますか?

はい、IronXL は、GridView から Excel へのエクスポート プロセス中に大規模なデータセットを効率的に処理し、速度とパフォーマンスを維持するように最適化されています。

IronXL を使用する際に Excel 出力をカスタマイズすることは可能ですか?

IronXL を使用すると、書式設定、スタイル設定、エクスポートされたファイルに追加のデータや数式を含めるなど、Excel 出力のさまざまな側面をカスタマイズできます。

GridView を Excel にエクスポートするための他のライブラリと比べて、IronXL はどうですか?

IronXL は、他のライブラリに比べてより簡単で柔軟なアプローチを提供し、最新の Excel 形式を強力にサポートし、C# アプリケーションとのシームレスな統合を実現します。

IronXL は XLSX 以外の形式へのエクスポートをサポートしていますか?

はい、IronXL は XLS、CSV、TSV などのさまざまな Excel 形式へのエクスポートをサポートしており、さまざまなプロジェクト要件に柔軟に対応できます。

プロジェクトで IronXL を使用するための前提条件は何ですか?

IronXL を使用するには、.NET 環境をセットアップする必要があります。NuGet 経由で C# プロジェクトに IronXL をインストールすることで、簡単に統合できます。

IronXL は GridView データを非同期にエクスポートできますか?

IronXL は非同期操作をサポートしているため、開発者はメイン アプリケーション スレッドをブロックすることなく GridView データを Excel ファイルにエクスポートできます。

GridView を Excel にエクスポートするために IronXL の使用を開始するにはどうすればよいですか?

始めるには、IronXL のドキュメントと例を参照してください。GridView から Excel へのデータのエクスポートを設定および実行するための手順が説明されています。

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

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

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