跳至頁尾內容
與其他組件相比

ASP.NET匯出到Excel:C#開發人員的最佳工具對比

在 ASP.NET Core Web 應用程式中,將資料匯出到 Excel 檔案是必不可少的。 無論是從資料庫產生報表、使用者能夠匯出 GridView 內容,或是建立 CSV 匯出文件,開發人員都需要可靠的方法來建立 Excel 文件。 這些文件必須在 Microsoft Excel 中正確打開,瀏覽器不得發出警告,也無需跳到新頁面來處理下載。

本文比較了 ASP.NET Core 中流行的 Excel 匯出方法,並檢視了傳統方法以及 IronXL、ClosedXML 和 EPPlus 等現代函式庫。

立即開始免費試用,探索 IronXL 如何簡化 ASP.NET Core 專案中 Excel 檔案的建立。

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

導出資料最簡單的方法涉及幾種不同的途徑。 大多數工作流程會先建立連接字串以檢索數據,然後再選擇匯出路徑。

*傳統 MIME 類型方法:*此舊方法使用 Content Type 屬性(設定為application/vnd.ms-excel )並將 HTML 內容串流傳輸到瀏覽器。 雖然它在舊系統中可以作為預設解決方案,但經常會觸發格式警告。 基於庫的解決方案:**現代庫需要新增 NuGet 引用,才能使用 Open XML 格式產生真正的 XLSX 檔案。 其中包括 IronXL、ClosedXML 和 EPPlus,它們提供 API 來建立工作簿物件並以正確的格式儲存檔案。

特徵MIME 類型/HTML封閉式 XMLEPPlusIronXL
真正的 XLSX 輸出是的是的是的
CSV 檔案支持手動的有限的有限的本國的
無Excel警告是的是的是的
配方支持是的是的是的
JSON/XML導出是的
商業許可不適用聚合物商業的
.NET Core 支援是的是的是的是的

傳統 GridView 導出方法的工作原理是什麼?

在傳統的 WebForms 和一些較舊的 MVC 模式中,開發人員通常會透過將 GridView 資料渲染為 HTML 來匯出資料。 該應用程式使用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
}
// 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
}
$vbLabelText   $csharpLabel

遺留輸出

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

此方法需要public override void VerifyRenderingInServerForm函數來繞過伺服器端驗證。 但是,產生的文件包含的是 HTML 而不是真正的 Excel 格式數據,導致 Microsoft Excel 顯示格式警告。 這種方法無法產生正確的 Excel 表格格式、公式或帶有文字的欄位。

IronXL 如何簡化 ASP.NET Core 中的 Excel 檔案產生?

IronXL提供了一個現代化的 API,用於建立真正的 Excel 文件,而無需依賴 Microsoft Office。 它允許用戶從同一頁面觸發下載,而不會中斷用戶體驗。 以下範例示範如何將資料匯出至 Excel 文件並將其傳輸到使用者的瀏覽器:

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 from your data source
        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;
        // Style the header cells
        var headerRange = worksheet["A1:C1"];
        headerRange.Style.Font.Bold = true;
        // Generate file for browser download
        byte[] fileBytes = workbook.ToByteArray();
        string filename = $"SalesReport_{DateTime.Now:yyyyMMdd}.xlsx";
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            filename);
    }
}
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 from your data source
        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;
        // Style the header cells
        var headerRange = worksheet["A1:C1"];
        headerRange.Style.Font.Bold = true;
        // Generate file for browser download
        byte[] fileBytes = workbook.ToByteArray();
        string filename = $"SalesReport_{DateTime.Now:yyyyMMdd}.xlsx";
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            filename);
    }
}
$vbLabelText   $csharpLabel

IronXL 輸出

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

IronXL 的WorkBook.Create方法會產生一個新的 Excel 文檔,而CreateWorkSheet新增命名的工作表標籤。 該程式庫在內部處理所有 Open XML 的複雜性,使開發人員能夠專注於用資料填充單元格。

ToByteArray()方法將工作簿轉換為適合 ASP.NET Core File()回應的位元組,並自動設定正確的內容處置標頭以供瀏覽器下載。 用戶會收到一個真正的 XLSX 文件,可以無警告地打開。

對於需要逗號分隔值格式的 CSV 匯出場景,IronXL 提供了SaveAsCsv 方法

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

封閉式 XML 和 EPPlus 有什麼不同?

ClosedXML為 Microsoft 的 Open XML SDK 提供了一個使用者友善的 API。 在解決方案資源管理器中,使用 NuGet 透過Install-Package ClosedXML安裝:

using ClosedXML.Excel;
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";
    using var stream = new MemoryStream();
    workbook.SaveAs(stream);
    return File(stream.ToArray(),
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        "export.xlsx");
}
using ClosedXML.Excel;
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";
    using var stream = new MemoryStream();
    workbook.SaveAs(stream);
    return File(stream.ToArray(),
        "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        "export.xlsx");
}
$vbLabelText   $csharpLabel

封閉式 XML 輸出

ASP.NET 匯出至 Excel:C# 開發人員最佳工具比較:圖 3 - 封閉式 XML 匯出至 Excel 輸出

EPPlus提供類似的功能,但商業用途需要注意其許可條款。 這兩個函式庫都能建立有效的 Excel 文件,但都缺少 IronXL 的原生 CSV 匯出和 JSON 轉換支援。

開發人員應該選擇哪個函式庫來進行 Excel 匯出?

對於需要匯出到 Excel 的 ASP.NET Core 應用程序,庫的選擇取決於專案需求:

在以下情況下選擇 IronXL:需要多格式支援(XLSX、CSV 檔案、JSON、XML)、需要專業支持,或建立商業應用程式需要保證與 ASP 專案中複雜的 Excel 功能相容。

在下列情況下選擇 ClosedXML:建置需要 和 授權且具有基本 Excel 檔案產生功能的開源專案。

在以下情況下選擇 EPPlus:現有專案已在使用 EPPlus,並且遷移成本超過了許可方面的考慮。

能力IronXL封閉式 XMLEPPlus
CSV/JSON/XML 導出✓ 原生
數據表集成
專業支援✓ 已包含社群付費層級
系統需求沒有任何沒有任何沒有任何

概括

實作 ASP.NET 匯出到 Excel 的功能需要在傳統的基於 HTML 的方法和現代庫解決方案之間做出選擇。 同時,使用新的HtmlTextWriterResponse.AddHeader進行內容處置的傳統 MIME 類型方法可以建立功能性下載,但匯出的檔案格式會觸發警告,並且缺乏真正的 Excel 功能。

IronXL 提供真正的 Excel 檔案產生功能,支援多種輸出格式、直覺的工作表和工作簿管理,並能正確處理資料行和儲存格。 該庫消除了舊程式碼中的void VerifyRenderingInServerForm重寫和object sender, EventArgs e模式。

有關實施指導,請參閱 IronXL 文件和程式碼範例購買許可證即可在生產環境中部署 IronXL,並產生使用者可以從瀏覽器下載的專業 Excel 文件。

!{--01001100010010010100001001010010010000010101001001011001010111110100011101000101010101 01000101111101010011010101000100000101010010010101000100010101000100010111110101011101001000110 1010101000100100001011111010100000101001001001111010001000101010101010000110101010100101010101011 10101010001010010010010010010000010100110001011111010000100100110001001111101000011010010111111010000110100101110--

常見問題解答

IronXL 在 ASP.NET Core 中匯出到 Excel 的主要功能有哪些?

IronXL 提供無縫的 Excel 檔案產生和編輯功能,使開發人員無需安裝 Microsoft Excel 即可匯出資料。它支援多種格式,例如 XLS、XLSX 和 CSV,並提供強大的樣式、格式和資料操作功能。

對於 ASP.NET Core 項目,IronXL 與 ClosedXML 有何優點?

IronXL 對匯出複雜資料結構提供了更全面的支持,並包含樣式設定和圖像嵌入等功能。 ClosedXML 雖然易於使用,但可能缺乏 IronXL 提供的一些高級功能,尤其是在大規模應用場景下。

IronXL 是否適用於從 ASP.NET 資料庫中建立 Excel 報表?

是的,IronXL 非常適合從資料庫產生 Excel 報告,可輕鬆從各種資料來源匯出數據,並確保產生的文件與 Microsoft Excel 相容。

與 EPPlus 相比,IronXL 有哪些優勢?

IronXL 提供更全面的 API、更佳的大型資料集效能以及更廣泛的 Excel 檔案建立和編輯功能,使其成為複雜 ASP.NET Core 應用程式更靈活的選擇。

IronXL能否高效處理大型資料集?

IronXL 針對效能進行了最佳化,能夠有效地處理大型資料集,確保快速的資料處理和匯出,而不會影響應用程式的速度。

IronXL匯出到Excel是否需要安裝Microsoft Office?

不,IronXL 不需要安裝 Microsoft Office。它可以獨立運行,在 ASP.NET Core 應用程式中提供完整的 Excel 檔案建立和操作功能。

喬迪·巴迪亞
軟體工程師
喬迪精通Python、C#和C++,除了在Iron Software運用這些技能外,他還從事遊戲程式設計。他參與產品測試、產品開發和研究等工作,為產品的持續改進做出了巨大貢獻。豐富的經驗讓他始終保持挑戰性和工作熱情,他表示這是他最喜歡在Iron Software工作的原因之一。喬迪在佛羅裡達州邁阿密長大,畢業於佛羅裡達大學,主修電腦科學和統計學。