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

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

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

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でパッケージ マネージャー コンソールを開き、次を実行します:

Install-Package IronXL.Excel

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

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

using System;
using System.Data;
using System.Web.UI;
using IronXL;
using System;
using System.Data;
using System.Web.UI;
using IronXL;
Imports System
Imports System.Data
Imports System.Web.UI
Imports IronXL
$vbLabelText   $csharpLabel

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);
    }
}
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);
    }
}
Imports System
Imports System.Data
Imports System.Web.UI
Imports IronXL

Public Partial Class GridViewExport
    Inherits Page

    Protected Sub Page_Load(sender As Object, e As EventArgs)
        If Not IsPostBack Then
            BindGridView()
        End If
    End Sub

    Private Sub BindGridView()
        Dim dt As New DataTable()
        dt.Columns.Add("EmployeeID", GetType(Integer))
        dt.Columns.Add("Name", GetType(String))
        dt.Columns.Add("Department", GetType(String))
        dt.Columns.Add("Salary", GetType(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()
    End Sub

    Protected Sub btnExport_Click(sender As Object, e As EventArgs)
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")

        ' Write header row
        For j As Integer = 0 To gvEmployees.HeaderRow.Cells.Count - 1
            worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells(j).Text)
        Next

        ' Write data rows
        For i As Integer = 0 To gvEmployees.Rows.Count - 1
            For j As Integer = 0 To gvEmployees.Rows(i).Cells.Count - 1
                worksheet.SetCellValue(i + 1, j, gvEmployees.Rows(i).Cells(j).Text)
            Next
        Next

        Dim filePath As String = Server.MapPath("~/Exports/EmployeeData.xlsx")
        workbook.SaveAs(filePath)
    End Sub
End Class
$vbLabelText   $csharpLabel

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);
}
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);
}
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
    Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
    Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")

    ' Write column headers
    Dim colCount As Integer = gvEmployees.HeaderRow.Cells.Count
    For i As Integer = 0 To colCount - 1
        Dim header As String = gvEmployees.HeaderRow.Cells(i).Text
        worksheet.SetCellValue(0, i, header)
    Next

    ' Write data rows
    For i As Integer = 0 To gvEmployees.Rows.Count - 1
        For j As Integer = 0 To gvEmployees.Rows(i).Cells.Count - 1
            worksheet.SetCellValue(i + 1, j, gvEmployees.Rows(i).Cells(j).Text)
        Next
    Next

    ' Auto-size each column for readability
    For col As Integer = 0 To colCount - 1
        worksheet.AutoSizeColumn(col)
    Next

    Dim filePath As String = Server.MapPath("~/Exports/EmployeeReport.xlsx")
    workbook.SaveAs(filePath)
End Sub
$vbLabelText   $csharpLabel

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";
// 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";
' Bold the entire header row (columns A through D)
Dim headerRange = worksheet("A1:D1")
headerRange.Style.Font.Bold = True
headerRange.Style.BackgroundColor = "#4472C4"
headerRange.Style.Font.FontColor = "#FFFFFF"
$vbLabelText   $csharpLabel

このパターンは、あらゆるサイズの範囲に一律に適用されます。スタイルプロパティの完全なリストについては、 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);
}
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);
}
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
    Dim sourceData As DataTable = TryCast(ViewState("EmployeeData"), DataTable)
    If sourceData Is Nothing Then
        Response.Write("No data available to export.")
        Return
    End If

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

    ' Column headers from DataTable schema
    For i As Integer = 0 To sourceData.Columns.Count - 1
        worksheet.SetCellValue(0, i, sourceData.Columns(i).ColumnName)
    Next

    ' Data rows from DataRow objects
    For i As Integer = 0 To sourceData.Rows.Count - 1
        For j As Integer = 0 To sourceData.Columns.Count - 1
            worksheet.SetCellValue(i + 1, j, sourceData.Rows(i)(j).ToString())
        Next
    Next

    Dim filePath As String = Server.MapPath("~/Exports/DataExport.xlsx")
    workbook.SaveAs(filePath)
End Sub
$vbLabelText   $csharpLabel

列名は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}";
    }
}
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}";
    }
}
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
    Try
        Dim sourceData As DataTable = TryCast(ViewState("EmployeeData"), DataTable)
        If sourceData Is Nothing Then
            Throw New InvalidOperationException("Session data has expired. Please reload the page.")
        End If

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

        For i As Integer = 0 To sourceData.Columns.Count - 1
            worksheet.SetCellValue(0, i, sourceData.Columns(i).ColumnName)
        Next

        For i As Integer = 0 To sourceData.Rows.Count - 1
            For j As Integer = 0 To sourceData.Columns.Count - 1
                worksheet.SetCellValue(i + 1, j, sourceData.Rows(i)(j).ToString())
            Next
        Next

        Dim filePath As String = Server.MapPath("~/Exports/SafeExport.xlsx")
        workbook.SaveAs(filePath)

        lblStatus.Text = "Export successful. File saved to server."
    Catch ex As Exception
        lblStatus.Text = $"Export failed: {ex.Message}"
    End Try
End Sub
$vbLabelText   $csharpLabel

ファイルをディスクに保存するのではなく、ブラウザの直接ダウンロードとして配信する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();
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();
Imports System.IO

' ... inside btnExport_Click after populating the worksheet ...

Dim fileBytes As Byte()
Using ms As New MemoryStream()
    workbook.SaveAs(ms)
    fileBytes = ms.ToArray()
End Using

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

このパターンでは、一時ファイルをディスクに書き込むことを回避できます。 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"));
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"));
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)

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

' Populate summary sheet ...
' Populate detail sheet ...

workbook.SaveAs(Server.MapPath("~/Exports/FullReport.xlsx"))
$vbLabelText   $csharpLabel

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

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

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

フィーチャー IronXL EPPlus クローズド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をセットにしたお得な価格で提供します。

よくある質問

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環境が必要であり、C# プロジェクトでNuGet経由でIronXL をインストールできます。

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

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

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

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

Curtis Chau
テクニカルライター

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

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね