Blazor匯出到Excel:使用C#中的IronXL的完整指南
將資料匯出到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);
}
在您的_Host.cshtml文件中包含此腳本:
<script src="~/excelExport.js"></script>
<script src="~/excelExport.js"></script>
此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)
{
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)
{
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
Throw New InvalidOperationException("Failed to generate sales report", ex)
End Try
End Function
End Class
此服務展示了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 = "";
var salesData = GetSalesData();
var fileBytes = ExcelService.GenerateSalesReport(salesData);
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.";
}
finally
{
isExporting = false;
}
}
private List<SalesData> GetSalesData()
{
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 }
};
}
}
此元件在匯出過程中為使用者提供反饋,優雅地處理錯誤,並生成帶時間戳的文件名稱。 DotNetStreamReference 包裝器能夠有效地將二進制資料流傳輸到JavaScript。
輸出
當我們運行程式碼時,我們將看到我們的頁面已載入,並有一個按鈕用於處理匯出過程。

當我們點擊按鈕時,資料將被保存到一個新的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");
details["A1"].Value = "SKU";
details["B1"].Value = "Name";
details["C1"].Value = "Quantity";
var headerRange = details["A1:C1"];
headerRange.Style.Font.Bold = true;
for (int i = 0; i < items.Count; i++)
{
var row = i + 2;
var item = items[i];
details[$"A{row}"].Value = item.SKU;
details[$"B{row}"].Value = item.Name;
details[$"C{row}"].Value = item.Quantity;
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");
details["A1"].Value = "SKU";
details["B1"].Value = "Name";
details["C1"].Value = "Quantity";
var headerRange = details["A1:C1"];
headerRange.Style.Font.Bold = true;
for (int i = 0; i < items.Count; i++)
{
var row = i + 2;
var item = items[i];
details[$"A{row}"].Value = item.SKU;
details[$"B{row}"].Value = item.Name;
details[$"C{row}"].Value = item.Quantity;
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")
details("A1").Value = "SKU"
details("B1").Value = "Name"
details("C1").Value = "Quantity"
Dim headerRange = details("A1:C1")
headerRange.Style.Font.Bold = True
For i As Integer = 0 To items.Count - 1
Dim row = i + 2
Dim item = items(i)
details($"A{row}").Value = item.SKU
details($"B{row}").Value = item.Name
details($"C{row}").Value = item.Quantity
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
IronXL能夠輕鬆處理多個工作表,應用基於業務規則的條件格式化,並在需要時支持進階的Excel功能,如樞紐分析表和圖表。 如需詳細的API文件,請存取我們的完整參考指南。

結論
IronXL將Blazor Server應用程式中Excel文件的生成從一個複雜的挑戰轉變為一個簡單的任務。 其直觀的API消除了對Microsoft Office安裝的需求,同時提供了存取進階Excel功能的能力。 從簡單的資料匯出到具有公式和格式的複雜多工作表報告,IronXL全部處理良好,性能卓越且可靠。
準備好以專業的Excel匯出功能增強您的Blazor應用程式了嗎? 立即開始免費試用IronXL,或探索我們的授權選項以進行生產部署。
常見問題
如何在Blazor Server應用程式中匯出Excel檔案?
您可以使用IronXL在Blazor Server應用程式中匯出Excel檔案,通過直接從您的伺服器建立、格式化及下載XLSX檔案來達成,無需Microsoft Office。
使用IronXL在Blazor中是否需要安裝Microsoft Office?
不,IronXL不需要在您的伺服器上安裝Microsoft Office即可在Blazor應用程式中建立、格式化及匯出Excel檔案。
IronXL是否可以與Blazor應用程式整合?
是的,IronXL可以與Blazor應用程式無縫整合,讓您輕鬆新增Excel匯出功能。
在網頁應用程式中匯出Excel檔案的一些常見用途是什麼?
常見用途包括生成報告、建立庫存清單,以及生成Excel格式的客戶發票。
是否有使用IronXL匯出Excel檔案的程式碼範例?
是的,本指南提供程式碼範例以幫助您在Blazor Server應用程式中使用IronXL實現Excel匯出功能。
是否可以在Blazor中使用IronXL格式化Excel檔案?
是的,IronXL允許您格式化Excel檔案,包括設置樣式、新增公式等,直接在Blazor應用程式中實現。
使用IronXL可以建立哪些型別的Excel檔案?
您可以使用IronXL建立XLSX檔案,這是一種廣泛使用的Excel檔案格式,與大多數試算表應用程式相容。




