IRONSOFTWAREHOME
與其他組件的比較

ASP.NET匯出到Excel:IronXL、ClosedXML和EPPlus的對比

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

將資料匯出到Excel是ASP.NET Core網頁應用程式中的標準需求。 不論您是產生成績報告、允許使用者下載GridView內容還是從資料庫查詢中產出CSV檔案,所選擇的方法決定了最終的檔案是否能在Microsoft Excel中正常開啟或觸發格式警告。 本文比較了C#開發人員可使用的最常見的Excel匯出方法——傳統的基於HTML的串流和現代化程式庫解決方案,包括IronXL、ClosedXML和EPPlus——讓您能為您的專案選擇合適的工具。

開始您的免費試用,看看IronXL如何在ASP.NET Core應用程式中處理Excel文件生成。

在ASP.NET Core中將資料匯出到Excel的常用方法有哪些?

ASP.NET Core開發人員在新增Excel匯出功能時有多種選擇。 每種方法在輸出文件的品質、實施所需的工作量和商業專案的授權影響上皆各有不同。

傳統的MIME型別串流是最古老的方法。 伺服器將回應的Content-Type標頭設置為application/vnd.ms-excel,並將HTML表格寫入輸出串流。 瀏覽器將此解釋為Excel下載,但檔案中包含的是HTML標記而非真實的試算表資料。 Microsoft Excel會檢測到不匹配並在開啟檔案前顯示格式警告。此方法無法支援公式、型別化列或適當的儲存格格式。

程式庫解決方案 新增一個NuGet程式包,使用Microsoft定義的Open XML格式來構建真正的XLSX檔案。 選擇包括IronXL、ClosedXML和EPPlus。 這三者産生的Excel文件均無警告地打開,支援儲存格級格式並在.NET Core上運行。 文件下載的官方.NET文件涵蓋了這些方法所用的基本ASP.NET Core機制。

下表總結了主要差異:

Excel導出程式庫比較:功能矩陣
功能MIME型別/HTMLClosedXMLEPPlusIronXL
真正的XLSX輸出是的是的是的
CSV文件支援手動有限有限原生
無Excel警告正常開啟是的是的是的
公式支援是的是的是的
JSON和XML導出是的
商業授權不適用MITPolyform商業
.NET Core支援是的是的是的是的

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

在編寫任何匯出程式碼之前,透過NuGet套件管理器或.NET CLI將IronXL新增至您的專案。 IronXL不依賴Microsoft Office或COM互運性,因此在.NET支持的任何操作系統上安裝都很簡單。

dotnet add package IronXL.Excel

或者,使用Visual Studio中的套件管理器主控台:

PM > Install-Package IronXL.Excel

套件安裝完成後,將using IronXL;新增至任何需要生成Excel文件的控制器或服務類別中。 在基本的導出場景中不需要額外的配置。 有關授權和部署選項,請存取IronXL授權頁面。

傳統的GridView出口方法如何運作?

在傳統的WebForms和一些較舊的MVC模式中,開發人員透過將GridView資料呈現為HTML並用誤導性的Content-Type標頭將其串流至瀏覽器以導出資料。 應用程式呼叫Response.AddHeader來設置文件名,並直接寫入HTML輸出。

// Traditional approach -- exports HTML disguised as Excel
public void ExportToExcel(object sender, EventArgs e)
{
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("content-disposition", "attachment;filename=Report.xls");
    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
    // Render grid content as HTML
    DataGrid1.RenderControl(htmlTextWriter);
    Response.Write(stringWriter.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
    // Required to prevent server form rendering errors
}

傳統輸出

ASP.NET導出到Excel:C#開發人員最佳工具比較:圖1 - 傳統Excel導出輸出

此方法需要覆蓋VerifyRenderingInServerForm以繞過伺服器端驗證。 生成的文件包含HTML而非真實的試算表資料,因此當使用者開啟時,Microsoft Excel會顯示格式警告。 輸出無法支援工作表公式、型別化資料列或儲存格級格式。 對於任何新的ASP.NET Core開發,應避免使用此模式,轉而采用一個適當的Excel程式庫。

IronXL如何簡化ASP.NET Core中的Excel文件生成?

IronXL提供了一個API,用於建立真正的XLSX文件,無需Microsoft Office或COM互運性。該程式庫完全在受控程式碼中構建工作簿物件,因此它可以在Linux、macOS和Windows上運行而無需額外的依賴。

以下範例建立一個工作簿,填充有銷售資料的工作表,對標題行應用粗體格式,並將文件串流到瀏覽器:

using IronXL;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpPost]
    public IActionResult ExportReport()
    {
        // Create workbook and worksheet
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Add header row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Quantity";
        worksheet["C1"].Value = "Revenue";

        // Populate data rows
        worksheet["A2"].Value = "Widget A";
        worksheet["B2"].Value = 150;
        worksheet["C2"].Value = 4500.00;
        worksheet["A3"].Value = "Widget B";
        worksheet["B3"].Value = 230;
        worksheet["C3"].Value = 6900.00;

        // Apply bold formatting to headers
        var headerRange = worksheet["A1:C1"];
        headerRange.Style.Font.Bold = true;

        // Stream file to browser
        byte[] fileBytes = workbook.ToByteArray();
        string filename = $"SalesReport_{DateTime.否w:yyyyMMdd}.xlsx";
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            filename);
    }
}
C#

IronXL輸出

ASP.NET導出到Excel:C#開發人員最佳工具比較:圖2 - IronXL導出到Excel輸出

WorkBook.Create在記憶體中構建一個新的Excel文件。 CreateWorkSheet新增了一個使用者在Excel窗口底部看到的標籤。 儲存格值使用Excel風格的範圍表示法("A1", "B2")分配,大多數C#開發人員會覺得這種方法易於理解和維護。

ToByteArray()方法將完成的工作簿轉換為位元組陣列,ASP.NET Core File() 回應方法正確的MIME型別和內容排列標頭將其直接流向使用者的瀏覽器。 下載的文件在Excel中開啟時沒有格式警告。

IronXL還透過SaveAsCsv方法支援導出到CSV格式:

// Export as CSV instead of XLSX
workbook.SaveAsCsv("output.csv");

在需要將工作表資料導出為JSON或XML的情況下,IronXL提供了SaveAsXml方法——這些功能在ClosedXML或EPPlus中均不可用。 IronXL程式碼範例API引用中可以找到更多模式。

IronXL如何處理DataTable和資料庫整合?

許多ASP.NET Core應用程式在匯出之前從SQL Server或其他關聯資料庫獲取資料。 IronXL提供了一級支援來直接將DataTable載入到工作表中,消除了手動迴圈行的需要。

以下範例使用ADO.NET查詢資料庫並從結果DataTable填充Excel工作表:

using IronXL;
using System.Data;
using System.Data.SqlClient;
using Microsoft.AspNetCore.Mvc;

public class ReportController : Controller
{
    private readonly string _connectionString;

    public ReportController(IConfiguration config)
    {
        _connectionString = config.GetConnectionString("DefaultConnection");
    }

    [HttpGet]
    public IActionResult DownloadReport()
    {
        DataTable table = new DataTable();

        using (SqlConnection connection = new SqlConnection(_connectionString))
        {
            string query = "SELECT OrderId, CustomerName, Total, OrderDate FROM Orders";
            using SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
            adapter.Fill(table);
        }

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

        // Write column headers from DataTable schema
        for (int col = 0; col < table.Columns.Count; col++)
        {
            worksheet[0, col].Value = table.Columns[col].ColumnName;
        }

        // Write data rows
        for (int row = 0; row < table.Rows.Count; row++)
        {
            for (int col = 0; col < table.Columns.Count; col++)
            {
                worksheet[row + 1, col].Value = table.Rows[row][col].ToString();
            }
        }

        byte[] fileBytes = workbook.ToByteArray();
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "Orders.xlsx");
    }
}

此模式保持控制器簡潔且可測試。 資料庫查詢和工作簿構建明確分離,使更換資料來源或新增匯總資料的附加工作表變得直截了當。 有關將現有Excel文件讀入DataTable的指導,請參閱IronXL閱讀Excel文件的指南

ClosedXML和EPPlus如何比較?

ClosedXML包裝了Microsoft的Open XML SDK,提供了可存取的API。 從NuGet安裝它:

Install-Package ClosedXML
SHELL

以下範例顯示了一個典型的ClosedXML匯出操作:

using ClosedXML.Excel;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpGet]
    public IActionResult ExportWithClosedXML()
    {
        using var workbook = new XLWorkbook();
        var worksheet = workbook.AddWorksheet("Data");
        worksheet.Cell(1, 1).Value = "Name";
        worksheet.Cell(1, 2).Value = "Amount";
        worksheet.Cell(2, 1).Value = "Alpha";
        worksheet.Cell(2, 2).Value = 1200;

        using var stream = new MemoryStream();
        workbook.SaveAs(stream);
        return File(stream.ToArray(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx");
    }
}

ClosedXML輸出

ASP.NET導出到Excel:C#開發人員最佳工具比較:圖3 - ClosedXML匯出到Excel輸出

ClosedXML使用基於整數的儲存格地址(Cell(row, col)),而不是IronXL使用的範圍字串表示法。 兩種方法都生成有效的XLSX檔案。 ClosedXML以MIT授權釋出,適用於開源專案而無商業授權顧慮。 ClosedXML GitHub倉庫提供了問題跟踪和社區貢獻的範例。

EPPlus在其Polyform非商業授權下提供類似功能,用於非商業用途,而生產部署需要商業授權。 在將其用於商業產品之前,請查看EPPlus授權概述。 EPPlus和ClosedXML都生成有效的Excel檔案,但二者均不提供如IronXL的原生CSV、JSON或XML匯出。

下表比較了與生產ASP.NET Core應用程式相關的特定功能:

生產ASP.NET Core專案的功能詳細比較
功能IronXLClosedXMLEPPlus
CSV、JSON和XML匯出原生不可用不可用
DataTable整合是的是的是的
技術支援授權包含僅社區付費等級
Microsoft Office依賴否ne否ne否ne
跨平台(Linux上的.NET)是的是的是的
授權型別商業MITPolyform / 商業

如何選擇適合專案的程式庫?

選擇正確的Excel匯出程式庫取決於三個因素:所需的輸出格式、專案的授權限制,以及您是否需要專業支援。

當選擇IronXL時,您的應用程式需要多格式輸出(XLSX、CSV、JSON、XML),或當您正在構建需要保證支援渠道的商業產品時,或當您需要進階Excel功能如公式評估、字型設置或圖表生成時。 IronXL的文件詳細涵蓋每個API表面,支援團隊直接回應授權持有者。 查看IronXL部落格獲取更多範例與教程。

當選擇ClosedXML時,您的專案是開源或非商業用途,只需要XLSX輸出。 MIT授權不對再發佈施加限制,並且API經由社區資源充分文件化。

當選擇EPPlus時,現有程式碼庫已使用EPPlus,並且向其他程式庫移植的成本比購買商業授權更高。

對於評估IronXL及其替代品的團隊,IronXL試用授權允許在承諾購買前進行全功能測試。 在IronXL範例頁面上可獲取更多讀寫Excel文件的程式碼範例

您的下一步應怎麼做?

既然您已經審閱了ASP.NET Core可用的Excel匯出方法,您現在可以採取以下步驟以向前推進:

  • 安裝IronXL使用dotnet add package IronXL.Excel,並參考入門指南建立您的首個工作簿。
  • 比較程式碼模式,通過檢查IronXL範例頁面中與用例匹配的情況(如資料庫匯出、多工作表工作簿或帶樣式報告)來比較。
  • 評價授權,通過造訪IronXL授權頁面理解開發、試運行和生產部署的選擇。
  • 探索附加格式,若應用程式需要從同一程式碼庫中匯出多種格式的資料,測試SaveAsCsv, SaveAsJsonSaveAsXml方法。
  • 從舊程式碼遷移,辨識解決方案中任何現有的Response.ContentType = "application/vnd.ms-excel"模式,並將其更換為IronXL工作簿建立,以消除對使用者的格式警告。

對於生產部署,購買授權以解鎖專業支援並確保遵守IronXL授權條款。

第一步:
arrow pointer
請注意: ClosedXML和EPPlus是其各自持有者的註冊商標。 本網站與ClosedXML或EPPlus 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天試用金鑰
無需信用卡或帳戶建立