如何在 Blazor 中使用 IronXL 導出到 Excel
幾乎所有 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);
}將此腳本新增至您的 _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)
{
// 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);
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com該服務展示了 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 }
};
}
}IRON VB CONVERTER ERROR developers@ironsoftware.com該元件在匯出過程中提供使用者回饋,優雅地處理錯誤,並產生帶有時間戳記的檔案名稱。 DotNetStreamReference 封裝器能夠有效率地將二進位資料串流傳輸到 JavaScript。
輸出
運行程式碼後,我們將看到頁面載入完畢,頁面上會顯示一個按鈕,用於處理匯出過程。
如何在 Blazor 中使用 IronXL 匯出到 Excel:圖 1 - Blazor 範例頁面
點擊按鈕後,資料將會儲存到新的 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();
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comIronXL 可以輕鬆處理多個工作表,根據業務規則套用條件格式,並在需要時支援進階 Excel 功能,例如資料透視表和圖表。 如需詳細的 API 文檔,請造訪我們的綜合參考指南。
結論
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 伺服器環境中將大量資料匯出至 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 檔案,讓您簡化工作流程並提高效率。









