IRONSOFTWAREHOME
USING IRONXL

如何使用 IronXL 從 C# 中的 GridView 匯出到 Excel

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

將GridView資料匯出到真正的Excel檔案是ASP.NET網頁應用程式中最常見的要求之一。 使用StringWriter的傳統方法建立假的Excel檔案,這在使用者嘗試開啟它們時會觸發瀏覽器警告和格式錯誤。 本指南將向您展示如何使用IronXL將GridView資料匯出到格式正確的.xlsx檔案中,從而消除開發者在舊方法中面臨的困擾。

為什麼傳統的GridView匯出方法會引起問題?

在ASP.NET C#中從GridView匯出到Excel的經典方法涉及渲染HTML並設置Content-Disposition附件檔案名值。 此方法要求覆蓋public override void VerifyRenderingInServerForm以避免執行時錯誤。 生成的檔案不是真正的Excel檔案——它是帶有.xls擴展名的HTML,導致使用者在打開時Excel會顯示警告訊息。

具體來說,傳統技術有以下缺點:

  • 每次打開時,Excel顯示"檔案格式和擴展名不匹配"的警告
  • 格式和資料型別丟失,因為資料被儲存為原始HTML
  • 您必須實現VerifyRenderingInServerForm作為解決方法,增加專案的技術債務
  • 生成的檔案缺乏正確的單元格元資料,無法用于下游自動化或報告工具

IronXL解決了這些問題,建立真正的.xlsx Excel檔案,無需在伺服器上安裝Microsoft Office。 您將獲得任何試算表應用程式都可以乾淨打開的檔案,並保留正確的資料型別、樣式和OOXML結構。

如何在您的ASP.NET專案中安裝IronXL?

在編寫任何匯出邏輯之前,使用NuGet包管理器將IronXL新增到您的專案中。 在Visual Studio中打開Package Manager 劣勢ole並運行:

PM > Install-Package IronXL.Excel

或者,在NuGet包管理器介面中搜索IronXL.Excel並從那裡安裝它。 安裝後,您可以在任何程式碼後置檔案中引用IronXL命名空間。

IronXL目標.NET標準2.0及以上,因此它適用於現代ASP.NET Core專案以及經典的ASP.NET框架應用程式。 在您的網站伺服器上不需要COM互操作、Office安裝和其他本機依賴。

詳細資訊請參見IronXL安裝指南IronXL NuGet包頁面

如何設置ASP.NET GridView進行匯出?

建立您的GridView控件和一個匯出按鈕。 標記是標準的Web表單:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="GridViewExportTest.Default" %>
<!DOCTYPE html>
<html>
<head runat="server">
    <title>Export GridView to Excel</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <h2>IronXL GridView Export Demo</h2>
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"
                HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White" CellPadding="5">
            </asp:GridView>
            <br />
            <asp:Button ID="btnExport" runat="server" Text="Export to Excel (.xlsx)"
                OnClick="btnExport_Click" />
        </div>
    </form>
</body>
</html>

此標記建立了一個簡單的頁面,其中包括一個綁定的GridView和一個可以觸發匯出的按鈕。 DataTable讀取列名。

將範例資料綁定到GridView

在您的程式碼後置中,將Session中,以便在匯出回發期間使用:

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

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

        private void BindGridView()
        {
            DataTable dt = new DataTable("Employees");
            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, "Mike Wilson", "Sales", 70000);
            dt.Rows.Add(4, "Emily Davis", "Engineering", 80000);

            GridView1.DataSource = dt;
            GridView1.DataBind();

            // Store DataTable in Session for export postback
            Session["GridData"] = dt;
        }
    }
}

Session中可以避免在匯出按鈕觸發的回發期間重新查詢資料庫或重建資料。 對於實際應用,請使用Entity FrameworkADO.NET用資料庫查詢替換硬編碼的行。

從ASP.NET C#中的GridView匯出到Excel:乾淨的C#解決方案:圖1 - 顯示範例GridView資料的UI

如何使用IronXL將GridView資料匯出到Excel?

乾淨的GridView匯出方法將您的DataTable轉換為IronXL WorkBook,並將結果直接流傳到瀏覽器。 以下是完整的匯出方法:

protected void btnExport_Click(object sender, EventArgs e)
{
    ExportGridViewToExcel();
}

private void ExportGridViewToExcel()
{
    DataTable dt = (DataTable)Session["GridData"];

    // Create a workbook and load data from the DataTable
    WorkBook workbook = WorkBook.Create();
    WorkBook.LoadWorkSheetsFromDataSet(new DataSet { Tables = { dt } }, workbook);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    // Apply header row formatting
    var headerRange = worksheet["A1:D1"];
    headerRange.Style.Font.Bold = true;
    headerRange.Style.Font.Size = 12;
    headerRange.Style.SetBackgroundColor("#3AC0F2");

    // Stream the file to the browser
    string filename = "GridViewExport_" + DateTime.Now.ToString("yyyyMMdd") + ".xlsx";
    Response.Clear();
    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    Response.AddHeader("content-disposition", "attachment;filename=" + filename);
    workbook.SaveAsStream(Response.OutputStream, IronXL.Enum.FileFormat.Xlsx);
    Response.Flush();
    Response.End();
}

匯出步驟解析

該過程分解為三個邏輯步驟:

  1. 檢索DataTable——DataTable。 這樣可避免重複的資料庫調用。
  2. 構建WorkBook——DataTable建立一個工作表,將列頭和行值複製到相應的單元格中。
  3. 流傳到瀏覽器——將Content-Type設置為OOXML MIME型別並寫入.xlsx擴展名的瀏覽器下載。 不會將臨時文件寫入磁碟。

這與傳統的HtmlTextWriter方法根本不同。 匯出的文件使用Open XML格式——這與Microsoft Excel本機使用的格式相同——因此開啟時不會有警告。

要獲取有關編程載入資料的更多資訊,請參見IronXL WorkBook文件C#中將DataTable匯出到Excel的步驟

從ASP.NET C#中的GridView匯出到Excel:乾淨的C#解決方案:圖2 - 匯出的Excel文件

如何將Excel文件存盤而不是流傳?

如果您的應用程式需要在伺服器上歸檔匯出,然後再發送下載連結到使用者,請將工作簿保存到文件路徑中,而不是將其流傳到Response.OutputStream中:

private void SaveExcelToDisk(WorkBook workbook, string exportFolder)
{
    // Ensure the exports directory exists
    if (!System.IO.Directory.Exists(exportFolder))
    {
        System.IO.Directory.CreateDirectory(exportFolder);
    }

    string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
    string filename = System.IO.Path.Combine(exportFolder, $"Report_{timestamp}.xlsx");

    workbook.SaveAs(filename);

    // Return the relative path for generating a download link
    string relativePath = "~/Exports/Report_" + timestamp + ".xlsx";
    Response.Write($"<script>alert('File saved to {relativePath}');</script>");
}

選擇流傳還是存盤

流傳與存盤匯出策略的比較
策略優勢劣勢最佳使用
流傳到瀏覽器無磁碟使用,即時交付無法存檔或重新發送按需使用者匯出
存盤文件持久存在以供審計、重下載或電郵需要清理工作,磁碟空間管理計劃報告,審計跟蹤

對於大多數互動式Web應用程式,直接流傳給瀏覽器是正確的選擇。在需要通過電子郵件發送文件、將其儲存以符合法規或允許從文件管理頁面重新下載時選擇存盤。

如何將高級格式應用於匯出的Excel工作表?

IronXL讓您細緻控制單元格樣式、列寬、數字格式等。 以下範例顯示如何構建專業樣式的匯出:

private void ExportWithFormatting()
{
    DataTable dt = new DataTable("Products");
    dt.Columns.Add("Product", typeof(string));
    dt.Columns.Add("Category", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("InStock", typeof(bool));

    dt.Rows.Add("Widget A", "Hardware", 29.99m, true);
    dt.Rows.Add("Widget B", "Hardware", 49.99m, false);
    dt.Rows.Add("Service Plan", "Support", 199.00m, true);

    WorkBook workbook = WorkBook.Create();
    WorkBook.LoadWorkSheetsFromDataSet(new DataSet { Tables = { dt } }, workbook);
    WorkSheet sheet = workbook.WorkSheets[0];

    // Style the header row
    sheet["A1:D1"].Style.Font.Bold = true;
    sheet["A1:D1"].Style.Font.Size = 13;
    sheet["A1:D1"].Style.SetBackgroundColor("#2196F3");
    sheet["A1:D1"].Style.Font.Color = "#FFFFFF";

    // Apply currency format to the Price column (column C, rows 2 onwards)
    sheet["C2:C4"].Style.NumberFormat.Format = "$#,##0.00";

    // Auto-size all columns for readability
    for (int col = 0; col < 4; col++)
    {
        sheet.AutoSizeColumn(col);
    }

    // Freeze the header row so it stays visible when scrolling
    sheet.FreezePanes(0, 0, 1, 0);

    workbook.SaveAs("FormattedExport.xlsx");
}

IronXL中可用的格式化選項

IronXL透過IronXL.Styles命名空間公開了豐富的格式屬性集:

  • 字體樣式——粗體、斜體、底線、字體系列和大小
  • 單元格背景顏色——可直接接受十六進位色值字串
  • 數字和日期格式——任何Excel格式字串,包括貨幣、百分比和日期模式
  • 列寬——手動像素寬度或AutoSizeColumn用于自動配合
  • 凍結窗格——鎖定標題行或列在滾動畫面時保持固定
  • 單元格邊框——全部四個邊框可配置樣式和顏色
  • 合併單元格——將跨行或列的單元格合併以用於報表標題

全面的API參考請參見IronXL單元格樣式文件IronXL數字格式化

從ASP.NET C#中的GridView匯出到Excel:乾淨的C#解決方案:圖3 - 匯出的格式化Excel文件

如何在GridView匯出中處理大資料集?

當GridView綁定到數千行時,一些技術可以保持匯出快速且具記憶體效益:

分頁和伺服器端DataTable

不要僅匯出GridView的可見頁。 在調用DataTable中。 IronXL一次性寫入行,而不需要多次將整個工作簿載入記憶體中,適合用於數萬行資料。

新增多個工作表

您可以在DataTable物件,以生成具有分開標籤的工作簿:

DataSet exportSet = new DataSet();
exportSet.Tables.Add(GetEmployeeData());    // Sheet 1
exportSet.Tables.Add(GetDepartmentData());  // Sheet 2
exportSet.Tables.Add(GetSalaryReport());    // Sheet 3

WorkBook workbook = WorkBook.Create();
WorkBook.LoadWorkSheetsFromDataSet(exportSet, workbook);

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;filename=MultiSheetReport.xlsx");
workbook.SaveAsStream(Response.OutputStream, IronXL.Enum.FileFormat.Xlsx);
Response.Flush();
Response.End();

每個DataTable.TableName成為Excel中的工作表標籤名。 此模式適用於將相關資料從多個視圖組合的管理報告。

相關指南:

使用IronXL進行GridView匯出的主要優勢是什麼?

使用IronXL將GridView資料匯出提供了相對於傳統HTML包裹方法的明顯優勢:

  • 真正的Excel檔案——建立有效的.xlsx格式,開啟時不會有瀏覽器警告或錯誤消息
  • 不需要Office安裝——在任何Web伺服器上無需Microsoft Excel或Office互操作
  • 不需要VerifyRenderingInServerForm覆蓋——消除了讓傳統程式碼混亂的固定格式解決方法
  • 全面的格式控制——設計單元格,應用數字格式,凍結窗格,並以程式方式建立專業工作表
  • 多工作表支持——將相關資料集匯出為單一工作簿中的分開標籤
  • 跨平台相容性——在Windows和Linux伺服器上正確運作,包括Docker容器和Azure應用服務

該程式庫在NuGet上可用,支持所有現代.NET目標,包括.NET 10。它還支持讀寫其他格式如CSV和ODS,使其成為您應用程式中所有試算表需求的單一依賴。

想要與其他Excel 程式庫做對比,請參見IronXL與ClosedXML對比IronXL功能概述

您接下來的步驟是什麼?

您現在擁有所有所需的東西來用乾淨無警告的IronXL實作替換舊的HtmlTextWriter GridView匯出。 以下是未來的步驟:

  • 嘗試免費試用——開始免費30天IronXL試用,無需信用卡,並在您自己的專案中測試匯出程式碼
  • 探索更多IronXL教程——IronXL部落格介紹資料導入、單元格公式、圖表生成和Excel模板工作流
  • 閱讀API參考——IronXL API文件涵蓋了WorkSheet和樣式API的每個方法
  • 比較授權選項——查看IronXL 價格以找到適合您的團隊規模和部署情境的授權
  • 提出問題——Iron Software支援團隊社群論壇提供中,如果您遇到任何意外情況
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有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

全球數百萬工程師的信賴

Iron Software的客戶標誌
獲得無義務諮詢
填寫以下表格或電郵sales@ironsoftware.com
您的資料將始終保密。
全球數百萬工程師的信賴
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立