使用 IRONXL 如何使用 IronXL.Excel 在 Blazor 中匯出至 Excel Curtis Chau 更新:2025年10月19日 下載 IronXL NuGet 下載 DLL 下載 開始免費試用 法學碩士副本 法學碩士副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 幾乎所有 Web 應用程式都需要將資料匯出到 Excel,無論是產生報表、庫存清單還是客戶發票。 在 Blazor Server 應用程式中,無需 Microsoft Office 即可可靠地實現此功能可能具有挑戰性。 這就是IronXL 的用武之地。 它允許您直接從伺服器建立、格式化和下載 Excel 文件,無需安裝 Office,並且與 Blazor 無縫整合。 本指南將向您展示如何輕鬆為您的應用程式添加專業的 Excel 匯出功能。讓我們開始吧。 IronXL 資料匯出至 Excel 入門指南 在 Blazor Server 應用程式中設定 IronXL 只需要極少的配置。 首先在 Visual Studio 2022 或更高版本中建立一個新的 Blazor Server 項目,目標框架為 .NET 6 或更高版本。 透過 NuGet 套件管理器控制台安裝 IronXL(有關其他方法,請參閱我們的完整安裝指南): Install-Package IronXL.Excel 接下來,建立一個用於檔案下載的 JavaScript 輔助函數。 在 wwwroot 資料夾中,新增一個名為 excelExport.js 的新 JavaScript 檔案: window.downloadFileFromStream = async (fileName, contentStreamReference) => { const arrayBuffer = await contentStreamReference.arrayBuffer(); const blob = new Blob([arrayBuffer]); const url = URL.createObjectURL(blob); const anchorElement = document.createElement('a'); anchorElement.href = url; anchorElement.download = fileName ?? 'export.xlsx'; anchorElement.click(); anchorElement.remove(); URL.revokeObjectURL(url); } window.downloadFileFromStream = async (fileName, contentStreamReference) => { const arrayBuffer = await contentStreamReference.arrayBuffer(); const blob = new Blob([arrayBuffer]); const url = URL.createObjectURL(blob); const anchorElement = document.createElement('a'); anchorElement.href = url; anchorElement.download = fileName ?? 'export.xlsx'; anchorElement.click(); anchorElement.remove(); URL.revokeObjectURL(url); } JAVASCRIPT 將此腳本新增至您的 _Host.cshtml 檔案: <script src="~/excelExport.js"></script> <script src="~/excelExport.js"></script> HTML 此 JavaScript 函數處理瀏覽器端的下載機制,將 Blazor Server 應用程式的位元組流轉換為可下載的檔案。函數會建立一個臨時 blob URL,觸發下載,並清理資源以防止記憶體洩漏。 如何使用 IronXL 將資料來源匯出到 Excel 檔案? 建立 Excel 匯出服務來處理您的業務邏輯。 此服務封裝了 IronXL 的功能,並為 Blazor Excel 匯出實作中的不同匯出場景提供了可重複使用的方法: using IronXL; using System.IO; using ExportExcel.Models; public class ExcelExportService { public byte[] GenerateSalesReport(List<SalesData> salesData) { try { var workbook = WorkBook.Create(ExcelFileFormat.XLSX); workbook.Metadata.Author = "Sales Department"; var worksheet = workbook.CreateWorkSheet("Monthly Sales"); worksheet["A1"].Value = "Date"; worksheet["B1"].Value = "Product"; worksheet["C1"].Value = "Quantity"; worksheet["D1"].Value = "Revenue"; worksheet["E1"].Value = "Profit Margin"; var headerRange = worksheet["A1:E1"]; headerRange.Style.Font.Bold = true; headerRange.Style.BackgroundColor = "#4472C4"; headerRange.Style.Font.Color = "#FFFFFF"; int row = 2; foreach (var sale in salesData) { worksheet[$"A{row}"].Value = sale.Date.ToString("yyyy-MM-dd"); worksheet[$"B{row}"].Value = sale.Product ?? "Unknown"; worksheet[$"C{row}"].Value = sale.Quantity; worksheet[$"D{row}"].Value = sale.Revenue; worksheet[$"E{row}"].Value = $"=D{row}*0.15"; row++; } worksheet.AutoSizeColumn(0, true); using var ms = workbook.ToStream(); return ms.ToArray(); } catch (Exception ex) { // If the program fails to return file throw new InvalidOperationException("Failed to generate sales report", ex); } } } using IronXL; using System.IO; using ExportExcel.Models; public class ExcelExportService { public byte[] GenerateSalesReport(List<SalesData> salesData) { try { var workbook = WorkBook.Create(ExcelFileFormat.XLSX); workbook.Metadata.Author = "Sales Department"; var worksheet = workbook.CreateWorkSheet("Monthly Sales"); worksheet["A1"].Value = "Date"; worksheet["B1"].Value = "Product"; worksheet["C1"].Value = "Quantity"; worksheet["D1"].Value = "Revenue"; worksheet["E1"].Value = "Profit Margin"; var headerRange = worksheet["A1:E1"]; headerRange.Style.Font.Bold = true; headerRange.Style.BackgroundColor = "#4472C4"; headerRange.Style.Font.Color = "#FFFFFF"; int row = 2; foreach (var sale in salesData) { worksheet[$"A{row}"].Value = sale.Date.ToString("yyyy-MM-dd"); worksheet[$"B{row}"].Value = sale.Product ?? "Unknown"; worksheet[$"C{row}"].Value = sale.Quantity; worksheet[$"D{row}"].Value = sale.Revenue; worksheet[$"E{row}"].Value = $"=D{row}*0.15"; row++; } worksheet.AutoSizeColumn(0, true); using var ms = workbook.ToStream(); return ms.ToArray(); } catch (Exception ex) { // If the program fails to return file throw new InvalidOperationException("Failed to generate sales report", ex); } } } Imports IronXL Imports System.IO Imports ExportExcel.Models Public Class ExcelExportService Public Function GenerateSalesReport(salesData As List(Of SalesData)) As Byte() Try Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX) workbook.Metadata.Author = "Sales Department" Dim worksheet = workbook.CreateWorkSheet("Monthly Sales") worksheet("A1").Value = "Date" worksheet("B1").Value = "Product" worksheet("C1").Value = "Quantity" worksheet("D1").Value = "Revenue" worksheet("E1").Value = "Profit Margin" Dim headerRange = worksheet("A1:E1") headerRange.Style.Font.Bold = True headerRange.Style.BackgroundColor = "#4472C4" headerRange.Style.Font.Color = "#FFFFFF" Dim row As Integer = 2 For Each sale In salesData worksheet($"A{row}").Value = sale.Date.ToString("yyyy-MM-dd") worksheet($"B{row}").Value = If(sale.Product, "Unknown") worksheet($"C{row}").Value = sale.Quantity worksheet($"D{row}").Value = sale.Revenue worksheet($"E{row}").Value = $"=D{row}*0.15" row += 1 Next worksheet.AutoSizeColumn(0, True) Using ms = workbook.ToStream() Return ms.ToArray() End Using Catch ex As Exception ' If the program fails to return file Throw New InvalidOperationException("Failed to generate sales report", ex) End Try End Function End Class $vbLabelText $csharpLabel 該服務展示了 IronXL 的關鍵功能,包括建立新的工作簿和工作表、新增格式化標題、使用從資料來源匯入的資料填充資料行、應用公式以及處理潛在錯誤。 AutoSizeColumn 方法可確保列能正確顯示,無論內容長度為何。 如需了解更多進階格式設定選項,請參閱我們的儲存格樣式指南。 如何在 Blazor 中實現檔案下載? 建立一個使用匯出服務並處理使用者互動的 Razor 元件: @page "/excel-export" @using ExportExcel.Models @inject ExcelExportService ExcelService @inject IJSRuntime JS <h3>Excel Export Dashboard</h3> <div class="export-section"> <button class="btn btn-primary" @onclick="ExportSalesReport" disabled="@isExporting"> @if (isExporting) { <span>Generating...</span> } else { <span>Export Sales Report</span> } </button> @if (!string.IsNullOrEmpty(errorMessage)) { <div class="alert alert-danger mt-2">@errorMessage</div> } </div> @code { private bool isExporting = false; private string errorMessage = ""; private async Task ExportSalesReport() { try { isExporting = true; errorMessage = ""; // Generate sample data - replace with actual data source var salesData = GetSalesData(); // Generate Excel file var fileBytes = ExcelService.GenerateSalesReport(salesData); // Trigger download using a memory stream to handle the file using var stream = new MemoryStream(fileBytes); using var streamRef = new DotNetStreamReference(stream); await JS.InvokeVoidAsync("downloadFileFromStream", $"SalesReport_{DateTime.Now:yyyyMMdd}.xlsx", streamRef); } catch (Exception ex) { errorMessage = "Export failed. Please try again."; // Log exception details for debugging } finally { isExporting = false; } } private List<SalesData> GetSalesData() { // Return your actual data here return new List<SalesData> { new() { Date = DateTime.Now, Product = "Widget A", Quantity = 100, Revenue = 5000 }, new() { Date = DateTime.Now.AddDays(-1), Product = "Widget B", Quantity = 75, Revenue = 3750 } }; } } @page "/excel-export" @using ExportExcel.Models @inject ExcelExportService ExcelService @inject IJSRuntime JS <h3>Excel Export Dashboard</h3> <div class="export-section"> <button class="btn btn-primary" @onclick="ExportSalesReport" disabled="@isExporting"> @if (isExporting) { <span>Generating...</span> } else { <span>Export Sales Report</span> } </button> @if (!string.IsNullOrEmpty(errorMessage)) { <div class="alert alert-danger mt-2">@errorMessage</div> } </div> @code { private bool isExporting = false; private string errorMessage = ""; private async Task ExportSalesReport() { try { isExporting = true; errorMessage = ""; // Generate sample data - replace with actual data source var salesData = GetSalesData(); // Generate Excel file var fileBytes = ExcelService.GenerateSalesReport(salesData); // Trigger download using a memory stream to handle the file using var stream = new MemoryStream(fileBytes); using var streamRef = new DotNetStreamReference(stream); await JS.InvokeVoidAsync("downloadFileFromStream", $"SalesReport_{DateTime.Now:yyyyMMdd}.xlsx", streamRef); } catch (Exception ex) { errorMessage = "Export failed. Please try again."; // Log exception details for debugging } finally { isExporting = false; } } private List<SalesData> GetSalesData() { // Return your actual data here return new List<SalesData> { new() { Date = DateTime.Now, Product = "Widget A", Quantity = 100, Revenue = 5000 }, new() { Date = DateTime.Now.AddDays(-1), Product = "Widget B", Quantity = 75, Revenue = 3750 } }; } } @page "/excel-export" @Imports ExportExcel.Models @inject ExcelExportService ExcelService @inject IJSRuntime JS <h3>Excel Export Dashboard</h3> <div class="export-section"> <button class="btn btn-primary" @onclick="ExportSalesReport" disabled="@isExporting"> @If isExporting Then <span>Generating...</span> Else <span>Export Sales Report</span> End If </button> @If Not String.IsNullOrEmpty(errorMessage) Then <div class="alert alert-danger mt-2">@errorMessage</div> End If </div> @code { Private isExporting As Boolean = False Private errorMessage As String = "" Private Async Function ExportSalesReport() As Task Try isExporting = True errorMessage = "" ' Generate sample data - replace with actual data source Dim salesData = GetSalesData() ' Generate Excel file Dim fileBytes = ExcelService.GenerateSalesReport(salesData) ' Trigger download using a memory stream to handle the file Using stream As New MemoryStream(fileBytes) Using streamRef As New DotNetStreamReference(stream) Await JS.InvokeVoidAsync("downloadFileFromStream", $"SalesReport_{DateTime.Now:yyyyMMdd}.xlsx", streamRef) End Using End Using Catch ex As Exception errorMessage = "Export failed. Please try again." ' Log exception details for debugging Finally isExporting = False End Try End Function Private Function GetSalesData() As List(Of SalesData) ' Return your actual data here Return New List(Of SalesData) From { New SalesData With {.Date = DateTime.Now, .Product = "Widget A", .Quantity = 100, .Revenue = 5000}, New SalesData With {.Date = DateTime.Now.AddDays(-1), .Product = "Widget B", .Quantity = 75, .Revenue = 3750} } End Function } $vbLabelText $csharpLabel 該元件在匯出過程中提供使用者回饋,優雅地處理錯誤,並產生帶有時間戳記的檔案名稱。 DotNetStreamReference 封裝器能夠有效率地將二進位資料串流傳輸到 JavaScript。 輸出 運行程式碼後,我們將看到頁面載入完畢,頁面上會顯示一個按鈕,用於處理匯出過程。 如何在 Blazor 中使用 IronXL 匯出到 Excel:圖 1 - Blazor 範例頁面 點擊按鈕後,資料將會儲存到新的 Excel 文件中,而匯出的檔案將會下載。 如何在 Blazor 中使用 IronXL 將數據匯出到 Excel:圖 2 - 匯出到 Excel 檔案的數據 IronXL 可以為您的 Excel 匯出新增哪些進階功能? IronXL 支援進階 Excel 功能,可匯出專業外觀的檔案。 在庫存管理場景中,您可以新增條件格式和多個工作表: using IronXL; using ExportExcel.Models; using System.IO; namespace ExportExcel.Services { public class InventoryExportService { public byte[] GenerateInventoryReport(List<InventoryItem> items) { var workbook = WorkBook.Create(); var details = workbook.CreateWorkSheet("Inventory Details"); // Add headers details["A1"].Value = "SKU"; details["B1"].Value = "Name"; details["C1"].Value = "Quantity"; // Apply bold font for headers var headerRange = details["A1:C1"]; headerRange.Style.Font.Bold = true; for (int i = 0; i < items.Count; i++) { var row = i + 2; // start from row 2 var item = items[i]; details[$"A{row}"].Value = item.SKU; details[$"B{row}"].Value = item.Name; details[$"C{row}"].Value = item.Quantity; // Highlight low stock items if (item.Quantity < item.ReorderLevel) { details[$"C{row}"].Style.BackgroundColor = "#FFB6B6"; } } using var stream = workbook.ToStream(); return stream.ToArray(); } } } using IronXL; using ExportExcel.Models; using System.IO; namespace ExportExcel.Services { public class InventoryExportService { public byte[] GenerateInventoryReport(List<InventoryItem> items) { var workbook = WorkBook.Create(); var details = workbook.CreateWorkSheet("Inventory Details"); // Add headers details["A1"].Value = "SKU"; details["B1"].Value = "Name"; details["C1"].Value = "Quantity"; // Apply bold font for headers var headerRange = details["A1:C1"]; headerRange.Style.Font.Bold = true; for (int i = 0; i < items.Count; i++) { var row = i + 2; // start from row 2 var item = items[i]; details[$"A{row}"].Value = item.SKU; details[$"B{row}"].Value = item.Name; details[$"C{row}"].Value = item.Quantity; // Highlight low stock items if (item.Quantity < item.ReorderLevel) { details[$"C{row}"].Style.BackgroundColor = "#FFB6B6"; } } using var stream = workbook.ToStream(); return stream.ToArray(); } } } Imports IronXL Imports ExportExcel.Models Imports System.IO Namespace ExportExcel.Services Public Class InventoryExportService Public Function GenerateInventoryReport(items As List(Of InventoryItem)) As Byte() Dim workbook = WorkBook.Create() Dim details = workbook.CreateWorkSheet("Inventory Details") ' Add headers details("A1").Value = "SKU" details("B1").Value = "Name" details("C1").Value = "Quantity" ' Apply bold font for headers Dim headerRange = details("A1:C1") headerRange.Style.Font.Bold = True For i As Integer = 0 To items.Count - 1 Dim row = i + 2 ' start from row 2 Dim item = items(i) details($"A{row}").Value = item.SKU details($"B{row}").Value = item.Name details($"C{row}").Value = item.Quantity ' Highlight low stock items If item.Quantity < item.ReorderLevel Then details($"C{row}").Style.BackgroundColor = "#FFB6B6" End If Next Using stream = workbook.ToStream() Return stream.ToArray() End Using End Function End Class End Namespace $vbLabelText $csharpLabel IronXL 可以輕鬆處理多個工作表,根據業務規則套用條件格式,並在需要時支援進階 Excel 功能,例如資料透視表和圖表。 如需詳細的 API 文檔,請造訪我們的綜合參考指南。 如何在 Blazor 中使用 IronXL 匯出到 Excel:圖 3 - 進階功能範例輸出 結論 IronXL 將 Blazor Server 應用程式中 Excel 檔案的產生從一項複雜的挑戰變成了一項簡單的任務。 它直覺的 API 無需安裝 Microsoft Office,即可存取進階 Excel 功能。 從簡單的數據匯出到包含公式和格式的複雜多工作表報告,IronXL 都能以卓越的效能和可靠性輕鬆應對。 準備好利用專業的 Excel 匯出功能來增強您的 Blazor 應用程式了嗎? 立即開始免費試用,體驗生產環境部署。 常見問題解答 如何在Blazor伺服器應用程式中匯出Excel檔案? 您可以使用 IronXL 在 Blazor Server 應用程式中匯出 Excel 檔案。IronXL.Excel 可讓您直接從伺服器建立、格式化和下載 Excel 檔案,而不需要 Microsoft Office。 我需要 Microsoft Office 才能在 Blazor 中處理 Excel 檔案嗎? 不,IronXL.Excel 可讓您在不需要 Microsoft Office 的情況下處理 Excel 檔案。它提供直接在您的 Blazor 應用程式中建立與處理 Excel 檔案的功能。 在 Blazor 中使用 IronXL.Excel 匯出有什麼好處? IronXL 提供與 Blazor 的無縫整合,讓您輕鬆建立、格式化和匯出 Excel 檔案。它簡化了流程,不需要 Microsoft Office,並支援各種 Excel 格式。 IronXL 可以與其他 Blazor 元件整合嗎? 是的,IronXL 可與 Blazor 元件無縫整合,讓您輕鬆地在應用程式中加入 Excel 匯出功能。 是否可以在 Blazor 中使用 IronXL.Excel 格式化 Excel 檔案? 是的,IronXL.Excel 提供全面的功能來格式化 Excel 檔案,包括設定儲存格的樣式、調整欄寬、設定複雜的公式等,這些功能都可在您的 Blazor Server 應用程式中完成。 在 Blazor 匯出至 Excel 時,如何處理大型資料集? IronXL.Excel 旨在有效處理大型資料集,確保在 Blazor Server 環境中將大量資料匯出至 Excel 檔案時的順暢效能。 IronXL.Excel 支援哪些 Excel 檔案格式? IronXL 支援各種 Excel 檔案格式,包括 XLS、XLSX 和 CSV,讓您在 Blazor 應用程式中輸出和處理 Excel 資料時更具彈性。 IronXL 可以用於在 Blazor 中產生報表嗎? IronXL 絕對是在 Blazor 應用程式中產生詳細報告的理想選擇。它提供強大的功能,可將資料編譯、格式化並匯出成專業的 Excel 報表。 IronXL 在匯出 Excel 檔案時如何確保資料完整性? IronXL 可在匯出過程中精確保留資料的結構與格式,確保資料的完整性,是 Blazor 應用程式的可靠解決方案。 有沒有辦法在 Blazor Server 應用程式中使用 IronXL.Excel 自動建立 Excel 檔案? 是的,IronXL.Excel 可用於在 Blazor Server 應用程式中自動建立和匯出 Excel 檔案,讓您簡化工作流程並提高效率。 Curtis Chau 立即與工程團隊聊天 技術撰稿人 Curtis Chau 擁有電腦科學學士學位(卡爾頓大學),專長於前端開發,精通 Node.js、TypeScript、JavaScript 和 React。Curtis 對製作直覺且美觀的使用者介面充滿熱情,他喜歡使用現代化的架構,並製作結構良好且視覺上吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 也有濃厚的興趣,他喜歡探索整合硬體與軟體的創新方式。在空閒時間,他喜歡玩遊戲和建立 Discord bots,將他對技術的熱愛與創意結合。 相關文章 發表日期 2026年2月15日 如何使用 OleDb vs IronXL.Excel 將 DataTable 匯出至 Excel C# 學習如何使用 OleDb vs IronXL.Excel 將 DataTable 匯出至 Excel C#。 閱讀更多 發表日期 2026年2月15日 如何在未安裝 Office 的情況下使用 IronXL 開啟 VB.NET 中的現有 Excel 檔案 了解如何使用 IronXL for .NET 在未安裝 Office 的情況下在 VB.NET 中開啟現有的 Excel 檔案。 閱讀更多 發表日期 2026年2月15日 C# CSV to XLSX:完整開發人員指南 使用 IronXL 在 C# 中將 CSV 轉換為 XLSX。載入 CSV 檔案、保留資料類型、新增圖表,以及匯出為 Excel 格式,而無需 Microsoft Office 的相依性。 閱讀更多 如何在 C# 中建立 Excel 檔案:Interop vs IronXL如何使用 IronXL.Excel 在 C# ...
發表日期 2026年2月15日 如何使用 OleDb vs IronXL.Excel 將 DataTable 匯出至 Excel C# 學習如何使用 OleDb vs IronXL.Excel 將 DataTable 匯出至 Excel C#。 閱讀更多
發表日期 2026年2月15日 如何在未安裝 Office 的情況下使用 IronXL 開啟 VB.NET 中的現有 Excel 檔案 了解如何使用 IronXL for .NET 在未安裝 Office 的情況下在 VB.NET 中開啟現有的 Excel 檔案。 閱讀更多
發表日期 2026年2月15日 C# CSV to XLSX:完整開發人員指南 使用 IronXL 在 C# 中將 CSV 轉換為 XLSX。載入 CSV 檔案、保留資料類型、新增圖表,以及匯出為 Excel 格式,而無需 Microsoft Office 的相依性。 閱讀更多