Blazor Kullanarak IronXL ile Excel Dosyalarını Nasıl Dışa Aktarılır
Verileri Excel'e aktarmak neredeyse her Blazor web uygulamasının gereksinimidir -- ister satış raporları, ister envanter listeleri veya müşteri faturaları üretiyor olun. Blazor Sunucu uygulamasında, bunu Microsoft Office gerektirmeden güvenilir bir şekilde başarmak göz korkutucu görünebilir. IronXL bunu kolaylaştırır: Sunucudan doğrudan Excel dosyaları oluşturabilir, biçimlendirebilir ve indirebilirsiniz, herhangi bir Office yüklemesi gerekmez. Bu kılavuz, proje kurulumu ve hizmet tasarımından gelişmiş biçimlendirme ve çoklu sayfa raporlarına kadar IronXL kullanarak Blazor'da üretime hazır bir Excel dışa aktarma özelliği oluşturmanızı adım adım anlatır.
Blazor Sunucu Projesinde IronXL Nasıl Kurulur?
Herhangi bir dışa aktarma mantığı yazmadan önce, IronXL'yi bir Blazor Sunucu projesine eklemeli ve bir tarayıcı tarafı indirme yardımcısını yapılandırmalısınız.
Blazor Sunucu Projesi Oluşturma
Visual Studio 2022 veya sonrası sürümlerinde, .NET 10 hedefleyerek yeni bir Blazor Sunucu projesi oluşturarak başlayın. Proje hazır olduğunda, NuGet Paket Yöneticisi Konsolu üzerinden IronXL'yi yükleyin:
Install-Package IronXl.Excel
IronXL, .NET 6 ve sonrasında çalışır, bu nedenle mevcut Blazor projeleri, çerçeveyi yükseltmeden benimseyebilir. Alternatif kurulum yöntemleri -- örneğin, NuGet UI veya CLI -- için IronXL kurulum kılavuzuna bakınız.
JavaScript İndirme Yardımcısını Ekleme
Blazor Sunucu, sunucu tarafında çalışır, bu nedenle bir dosya indirmeyi tetiklemek için küçük bir JavaScript köprüsü gereklidir. Klasorunuzdeki wwwroot dosyaya, excelExport.js adli bir dosya ekleyin:
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);
}
Bu betigi _Host.cshtml dosyaniza ekleyin (veya .NET 8+ icin App.razor):
<script src="~/excelExport.js"></script>
<script src="~/excelExport.js"></script>
Bu işlev, Blazor'dan gelen bayt akışını geçici bir blob URL'sine dönüştürür, tarayıcı indirmesini tetikler, ardından bellek sızıntılarını önlemek için URL nesnesini temizler. Kasıtlı olarak minimaldir -- ağır yük C# ile sunucu tarafında gerçekleşir.
C# dilinde Excel Dışa Aktarma Hizmeti Nasıl Oluşturulur?
Excel oluşturmayı Razor bileşenlerinden ayırmak, kodu test edilebilir ve birden fazla sayfada kullanılabilir hale getirir. Aşağıdaki desen, IronXL'yi özel bir hizmet sınıfına sarar.
ExcelExportService Oluşturma
Yeni bir Services/ExcelExportService.cs dosyasi oluşturun:
using IronXL;
using System.IO;
using ExportExcel.Models;
public class ExcelExportService
{
public byte[] GenerateSalesReport(List<SalesData> salesData)
{
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
workbook.Metadata.Author = "Sales Department";
var worksheet = workbook.CreateWorkSheet("Monthly Sales");
// Add column headers
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
worksheet["E1"].Value = "Profit Margin";
// Style the header row
var headerRange = worksheet["A1:E1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.Color = "#FFFFFF";
// Populate data rows
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();
}
}
using IronXL;
using System.IO;
using ExportExcel.Models;
public class ExcelExportService
{
public byte[] GenerateSalesReport(List<SalesData> salesData)
{
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
workbook.Metadata.Author = "Sales Department";
var worksheet = workbook.CreateWorkSheet("Monthly Sales");
// Add column headers
worksheet["A1"].Value = "Date";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Quantity";
worksheet["D1"].Value = "Revenue";
worksheet["E1"].Value = "Profit Margin";
// Style the header row
var headerRange = worksheet["A1:E1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.Color = "#FFFFFF";
// Populate data rows
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();
}
}
Imports IronXL
Imports System.IO
Imports ExportExcel.Models
Public Class ExcelExportService
Public Function GenerateSalesReport(salesData As List(Of SalesData)) As Byte()
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
workbook.Metadata.Author = "Sales Department"
Dim worksheet = workbook.CreateWorkSheet("Monthly Sales")
' Add column headers
worksheet("A1").Value = "Date"
worksheet("B1").Value = "Product"
worksheet("C1").Value = "Quantity"
worksheet("D1").Value = "Revenue"
worksheet("E1").Value = "Profit Margin"
' Style the header row
Dim headerRange = worksheet("A1:E1")
headerRange.Style.Font.Bold = True
headerRange.Style.BackgroundColor = "#4472C4"
headerRange.Style.Font.Color = "#FFFFFF"
' Populate data rows
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
End Function
End Class
Hizmeti Kayıt Etme
DI konteynerinde Program.cs hizmeti ekleyin:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<ExcelExportService>();
var app = builder.Build();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddScoped<ExcelExportService>();
var app = builder.Build();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.Extensions.DependencyInjection
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddRazorPages()
builder.Services.AddServerSideBlazor()
builder.Services.AddScoped(Of ExcelExportService)()
Dim app = builder.Build()
app.MapBlazorHub()
app.MapFallbackToPage("/_Host")
app.Run()
Bu hizmet, birkaç önemli IronXL yeteneğini gösterir. Yeni calisma kitaplari ve sayfalari oluşturmak icin tek bir yöntem cagrisi yapabilir, stillendirilmis basliklar uygulayabilir, herhangi bir veri kaynaginindan satirlari doldurabilir ve =D2*0.15 gibi Excel formulleri yerlesik hale getirebilirsiniz. AutoSizeColumn cagrisi, verilerin uzunluguna bakilmaksizin sutunlarin iceriği dogru sekilde gösterecek kadar genis olmasini saglar. Daha fazla biçimlendirme seçeneği için hücre biçimlendirme kılavuzuna bakın.
Blazor Bileşeninden Excel İndirmeyi Nasıl Tetiklersiniz?
Hizmet kurulduktan sonra, bu hizmeti çağıran ve ortaya çıkan baytları tarayıcıya ileten bir Razor bileşenine ihtiyaçınız var.
Razor Bileşeni Yazma
Pages/ExcelExportDashboard.razor sayfasinda bir sayfa oluşturun:
@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)
{
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 }
};
}
}
@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)
{
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 }
};
}
}
Imports ExportExcel.Models
Imports Microsoft.JSInterop
@page "/excel-export"
@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 = ""
Dim salesData = GetSalesData()
Dim fileBytes = ExcelService.GenerateSalesReport(salesData)
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."
Finally
isExporting = False
End Try
End Function
Private Function GetSalesData() As List(Of SalesData)
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
}
Bileşenin Yaptıkları
isExporting flagi, oluşturma sirasinda dugmeyi devre disi birakarak yinelenen işlemleri onler. DotNetStreamReference sarmalayıcı ile .NET hafiza akimindan JavaScript fonksiyonuna etkili ikili akış saglanir ve yuk boyutunu artiracak buyuk base64 dizgelerinden kacınılır. SalesReport_20260228.xlsx gibi zaman damgali dosya adlari indirilenleri tahsis konfigürasyonu olmadan düzenli tutar.
Tarayıcıda /excel-export sayfasina gidildiginde, veri cikasina sahip panolar yüklü gelir.

Düğmeye tıkladığınızda, hesap tablosu oluşturulur ve tarayıcı dosyayı otomatik olarak indirir:

Excel Dışa Aktarımlarınıza Hangi Gelişmiş Biçimlendirmeyi Uygulayabilirsiniz?
Temel veri aktarımları birçok kullanım senaryosunu karşılar, ancak üretim uygulamaları sıklıkla koşullu biçimlendirme, birden fazla çalışma sayfası veya veri doğrulaması gerektirir. IronXL bunların hepsini yerel olarak destekler.
Envanter Raporları için Koşullu Biçimlendirme
Aşağıdaki hizmet, düşük stoklu ürünleri kırmızı ile vurgular -- depolama veya envanter yönetimi uygulamaları için yaygın bir gereksinimdir.
using IronXL;
using ExportExcel.Models;
using System.IO;
public class InventoryExportService
{
public byte[] GenerateInventoryReport(List<InventoryItem> items)
{
var workbook = WorkBook.Create();
var details = workbook.CreateWorkSheet("Inventory Details");
// Column headers
details["A1"].Value = "SKU";
details["B1"].Value = "Name";
details["C1"].Value = "Quantity";
details["D1"].Value = "Reorder Level";
details["E1"].Value = "Status";
var headerRange = details["A1:E1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#2E75B6";
headerRange.Style.Font.Color = "#FFFFFF";
for (int i = 0; i < items.Count; i++)
{
int 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;
details[$"D{row}"].Value = item.ReorderLevel;
details[$"E{row}"].Value = item.Quantity < item.ReorderLevel
? "Reorder Required"
: "OK";
if (item.Quantity < item.ReorderLevel)
{
// Highlight the entire row for low-stock items
details[$"A{row}:E{row}"].Style.BackgroundColor = "#FFB6B6";
details[$"C{row}"].Style.Font.Bold = true;
}
}
details.AutoSizeColumn(0, true);
details.AutoSizeColumn(1, true);
using var stream = workbook.ToStream();
return stream.ToArray();
}
}
using IronXL;
using ExportExcel.Models;
using System.IO;
public class InventoryExportService
{
public byte[] GenerateInventoryReport(List<InventoryItem> items)
{
var workbook = WorkBook.Create();
var details = workbook.CreateWorkSheet("Inventory Details");
// Column headers
details["A1"].Value = "SKU";
details["B1"].Value = "Name";
details["C1"].Value = "Quantity";
details["D1"].Value = "Reorder Level";
details["E1"].Value = "Status";
var headerRange = details["A1:E1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#2E75B6";
headerRange.Style.Font.Color = "#FFFFFF";
for (int i = 0; i < items.Count; i++)
{
int 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;
details[$"D{row}"].Value = item.ReorderLevel;
details[$"E{row}"].Value = item.Quantity < item.ReorderLevel
? "Reorder Required"
: "OK";
if (item.Quantity < item.ReorderLevel)
{
// Highlight the entire row for low-stock items
details[$"A{row}:E{row}"].Style.BackgroundColor = "#FFB6B6";
details[$"C{row}"].Style.Font.Bold = true;
}
}
details.AutoSizeColumn(0, true);
details.AutoSizeColumn(1, true);
using var stream = workbook.ToStream();
return stream.ToArray();
}
}
Imports IronXL
Imports ExportExcel.Models
Imports System.IO
Public Class InventoryExportService
Public Function GenerateInventoryReport(items As List(Of InventoryItem)) As Byte()
Dim workbook = WorkBook.Create()
Dim details = workbook.CreateWorkSheet("Inventory Details")
' Column headers
details("A1").Value = "SKU"
details("B1").Value = "Name"
details("C1").Value = "Quantity"
details("D1").Value = "Reorder Level"
details("E1").Value = "Status"
Dim headerRange = details("A1:E1")
headerRange.Style.Font.Bold = True
headerRange.Style.BackgroundColor = "#2E75B6"
headerRange.Style.Font.Color = "#FFFFFF"
For i As Integer = 0 To items.Count - 1
Dim row As Integer = i + 2
Dim item = items(i)
details($"A{row}").Value = item.SKU
details($"B{row}").Value = item.Name
details($"C{row}").Value = item.Quantity
details($"D{row}").Value = item.ReorderLevel
details($"E{row}").Value = If(item.Quantity < item.ReorderLevel, "Reorder Required", "OK")
If item.Quantity < item.ReorderLevel Then
' Highlight the entire row for low-stock items
details($"A{row}:E{row}").Style.BackgroundColor = "#FFB6B6"
details($"C{row}").Style.Font.Bold = True
End If
Next
details.AutoSizeColumn(0, True)
details.AutoSizeColumn(1, True)
Using stream = workbook.ToStream()
Return stream.ToArray()
End Using
End Function
End Class
IronXL, oluşturulma zamanında veri değerlerine dayalı hücre seviyesinde biçimlendirme uygular. Ayrıca deklaratif olarak koşullu biçimlendirme kuralları uygulayabilir veya aynı çalışma kitabı içinde birden fazla çalışma sayfası yönetebilirsiniz -- örneğin, biri mevcut stok için, diğeri ise geçmiş siparişler için.
Tek Bir Dışa Aktarıma Birden Fazla Çalışma Sayfası Ekleme
Verilerin mantıksal sayfalara ayrılması, ayrı indirmeler gerektirmeden okunabilirliği artırır.
public byte[] GenerateMultiSheetReport(
List<SalesData> sales,
List<InventoryItem> inventory)
{
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Sheet 1 -- Sales summary
var salesSheet = workbook.CreateWorkSheet("Sales");
salesSheet["A1"].Value = "Date";
salesSheet["B1"].Value = "Revenue";
salesSheet["A1:B1"].Style.Font.Bold = true;
for (int i = 0; i < sales.Count; i++)
{
salesSheet[$"A{i + 2}"].Value = sales[i].Date.ToString("yyyy-MM-dd");
salesSheet[$"B{i + 2}"].Value = sales[i].Revenue;
}
// Sheet 2 -- Inventory snapshot
var invSheet = workbook.CreateWorkSheet("Inventory");
invSheet["A1"].Value = "SKU";
invSheet["B1"].Value = "Name";
invSheet["C1"].Value = "Quantity";
invSheet["A1:C1"].Style.Font.Bold = true;
for (int i = 0; i < inventory.Count; i++)
{
invSheet[$"A{i + 2}"].Value = inventory[i].SKU;
invSheet[$"B{i + 2}"].Value = inventory[i].Name;
invSheet[$"C{i + 2}"].Value = inventory[i].Quantity;
}
using var stream = workbook.ToStream();
return stream.ToArray();
}
public byte[] GenerateMultiSheetReport(
List<SalesData> sales,
List<InventoryItem> inventory)
{
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
// Sheet 1 -- Sales summary
var salesSheet = workbook.CreateWorkSheet("Sales");
salesSheet["A1"].Value = "Date";
salesSheet["B1"].Value = "Revenue";
salesSheet["A1:B1"].Style.Font.Bold = true;
for (int i = 0; i < sales.Count; i++)
{
salesSheet[$"A{i + 2}"].Value = sales[i].Date.ToString("yyyy-MM-dd");
salesSheet[$"B{i + 2}"].Value = sales[i].Revenue;
}
// Sheet 2 -- Inventory snapshot
var invSheet = workbook.CreateWorkSheet("Inventory");
invSheet["A1"].Value = "SKU";
invSheet["B1"].Value = "Name";
invSheet["C1"].Value = "Quantity";
invSheet["A1:C1"].Style.Font.Bold = true;
for (int i = 0; i < inventory.Count; i++)
{
invSheet[$"A{i + 2}"].Value = inventory[i].SKU;
invSheet[$"B{i + 2}"].Value = inventory[i].Name;
invSheet[$"C{i + 2}"].Value = inventory[i].Quantity;
}
using var stream = workbook.ToStream();
return stream.ToArray();
}
Public Function GenerateMultiSheetReport( _
sales As List(Of SalesData), _
inventory As List(Of InventoryItem)) As Byte()
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
' Sheet 1 -- Sales summary
Dim salesSheet = workbook.CreateWorkSheet("Sales")
salesSheet("A1").Value = "Date"
salesSheet("B1").Value = "Revenue"
salesSheet("A1:B1").Style.Font.Bold = True
For i As Integer = 0 To sales.Count - 1
salesSheet($"A{i + 2}").Value = sales(i).Date.ToString("yyyy-MM-dd")
salesSheet($"B{i + 2}").Value = sales(i).Revenue
Next
' Sheet 2 -- Inventory snapshot
Dim invSheet = workbook.CreateWorkSheet("Inventory")
invSheet("A1").Value = "SKU"
invSheet("B1").Value = "Name"
invSheet("C1").Value = "Quantity"
invSheet("A1:C1").Style.Font.Bold = True
For i As Integer = 0 To inventory.Count - 1
invSheet($"A{i + 2}").Value = inventory(i).SKU
invSheet($"B{i + 2}").Value = inventory(i).Name
invSheet($"C{i + 2}").Value = inventory(i).Quantity
Next
Using stream = workbook.ToStream()
Return stream.ToArray()
End Using
End Function
Çalışma kitabı özelliklerini, alan operasyonlarını ve grafik desteğini kapsayan kapsamlı bir API referansı için IronXL API belgelerine göz atın.

Hataları ve Büyük Veri Kümelerini Etkili Şekilde Nasıl Ele Alırsınız?
Excel dışa aktarma işlemleri sessizce başarısız olabilir veya veri kümeleri büyük olduğunda performans düşebilir. Aşağıdaki desenler her iki kaygıyı da ele alır.
Hizmet Katmanında Hata Yönetimi
Hata yönetimini tüm çağıranlara karşı tutarlı tutarak oluşturma mantığının hizmette (bileşende değil) bulunduğundan emin olun. Önerilen desen, IronXL istisnalarının yayılmasına izin vermek, ardından hangi raporun başarısız olduğu hakkında bağlam içeren bir alan belirli istisnayla sarmaktır.
Calisma kitabı oluşturma surecini GenerateSalesReport ile try/catch bloku ile sarmalayin, Exception yakalayin ve InvalidOperationException("Failed to generate sales report", ex) olarak tekrar atin. Blazor bileşeninde InvalidOperationException yakalayın ve kullanıcı dostu bir mesaj verin, ic detayları aciga cikarmadan. Hizmet yaratıcıya dahil edilen ILogger<t> kullanarak ic hatalar yazdirin, boylece geliştirme takimi hatalari belirli bir calisma kitabi operasyonu ile takip edebilir. Ham istisna mesajlarını son kullanıcılara asla yüzeye çıkarmayın -- dosya yolları, bellek adresleri veya yığın izleri sunucu dahili bilgilerini açığa çıkarabilir.
Blazor'da yapılandırılmış hata kaydını yönlendiren resmi Microsoft dokümantasyonundaki hata yönetimi en iyi uygulamalarına bakın. .NET icinde test edilebilir hizmetler oluşturmaya yonelik daha fazla rehberlik için, Microsoft bağımlılık enjeksiyonu belgeleri burada ExcelExportService ile kullanılan modele tam olarak nasıl kaydedileceğini ve oluşturulacağını açıklar.
Büyük Veri Kümeleri İçin Performans Düşünceleri
Birkaç bin satırdan fazla veri kümeleri için, şu yaklaşımları düşünün:
| Strateji | Ne Zaman Kullanılır | IronXL Desteği |
|---|---|---|
| Doğrudan yanıta yayın | Files >10 MB | workbook.ToStream() |
| Dışa aktarmadan önce verileri sayfalayarak düzenleyin | Filtreler ile UI güdümlü dışa aktarmalarda | Hizmette çalışma kitabını oluşturmadan önce uygulayın |
| Arka plan işi + indirme bağlantısı | Reports taking >5 seconds | SignalR veya yoklamayla birleştirin |
| Büyük sayfalarda AutoSizeColumn'u devre dışı bırakın | Sheets with >500 rows | Sabit sütun genişliklerini ayarlayın |
IronXL'in ToStream() metodu, tüm dosyayi oncelikle bayt dizisine yuklemeden dogrudan cikis akimina yazar, boylece buyuk calisma kitaplarinda bellek kullanimi daha dusuk kalir. Ek performans kılavuzu için, IronXL ile büyük Excel dosyalarını okuma ve yazma konusuna bakın.
IronXL'nin Desteklediği Diğer Excel Özellikleri Nelerdir?
Temel dışa aktarmanın ötesinde, IronXL gerçek dünya raporlama gereksinimlerini karşılayan geniş bir Excel özellikleri yelpazesi sunar.
Formüller, Adlandırılmış Aralıklar ve Sayı Formatlama
Excel hücresine direkt olarak yazdığınız aynı sözdizimini kullanarak her türlü Excel formülünü gömebilirsiniz. IronXL formülleri okuma sırasında değerlendirir, bu nedenle oluşturulan dosyanın kullanıcıları hesaplanan sonuçları elektronik tabloyu açar açmaz görürler. Adlandırılmış aralıklar, formülleri daha okunabilir ve zaman içinde bakımı kolay hale getirir:
// Aggregate formulas on a summary row
worksheet["E2"].Value = "=SUM(D2:D100)";
worksheet["F2"].Value = "=AVERAGE(C2:C100)";
worksheet["G2"].Value = "=COUNTIF(B2:B100,\"Widget A\")";
// Named ranges improve formula readability
worksheet["D2:D100"].Name = "RevenueColumn";
worksheet["E2"].Value = "=SUM(RevenueColumn)";
// Number and date formatting prevents type misinterpretation
worksheet["D2"].Value = 12345.67m;
worksheet["D2"].FormatString = "#,##0.00";
worksheet["A2"].Value = DateTime.Now;
worksheet["A2"].FormatString = "dd/MM/yyyy";
// Aggregate formulas on a summary row
worksheet["E2"].Value = "=SUM(D2:D100)";
worksheet["F2"].Value = "=AVERAGE(C2:C100)";
worksheet["G2"].Value = "=COUNTIF(B2:B100,\"Widget A\")";
// Named ranges improve formula readability
worksheet["D2:D100"].Name = "RevenueColumn";
worksheet["E2"].Value = "=SUM(RevenueColumn)";
// Number and date formatting prevents type misinterpretation
worksheet["D2"].Value = 12345.67m;
worksheet["D2"].FormatString = "#,##0.00";
worksheet["A2"].Value = DateTime.Now;
worksheet["A2"].FormatString = "dd/MM/yyyy";
' Aggregate formulas on a summary row
worksheet("E2").Value = "=SUM(D2:D100)"
worksheet("F2").Value = "=AVERAGE(C2:C100)"
worksheet("G2").Value = "=COUNTIF(B2:B100,""Widget A"")"
' Named ranges improve formula readability
worksheet("D2:D100").Name = "RevenueColumn"
worksheet("E2").Value = "=SUM(RevenueColumn)"
' Number and date formatting prevents type misinterpretation
worksheet("D2").Value = 12345.67D
worksheet("D2").FormatString = "#,##0.00"
worksheet("A2").Value = DateTime.Now
worksheet("A2").FormatString = "dd/MM/yyyy"
Adlandırılmış aralıkları tanımlamak ve sayı formatını açıkça ayarlamak için, IronXL her ikisini de aralık nesnesi üzerindeki özellikler olarak sunar. Bu, Excel'in para birimi değerlerini düz metin olarak işlemesini engeller -- bu, değerleri dizi olarak depolayan veritabanlarından finansal veri dışa aktarırken yaygın bir sorundur.
Desteklenen Excel Dosya Formatları
IronXL, .xlsx, .xls, .csv ve .tsv dahil olmak üzere birden fazla Excel formatini okuyup yazabilir. Format kaydetme zamanında belirlenir, bu nedenle aynı servis sınıfı, küçük bir parametre değişikliği ile hem Excel hem de CSV dışa aktarmalarını destekleyebilir:
// Export as CSV for systems that consume flat files
workbook.SaveAs("report.csv");
// Or stream as CSV for download
using var ms = workbook.ToStream(ExcelFileFormat.CSV);
// Export as CSV for systems that consume flat files
workbook.SaveAs("report.csv");
// Or stream as CSV for download
using var ms = workbook.ToStream(ExcelFileFormat.CSV);
' Export as CSV for systems that consume flat files
workbook.SaveAs("report.csv")
' Or stream as CSV for download
Using ms As Stream = workbook.ToStream(ExcelFileFormat.CSV)
End Using
Bu esneklik, aşağı akış sistemlerinin -- ERP platformları veya veri ambarları gibi -- belirli bir dosya formatı beklediği entegrasyonlarda önemlidir. IronXL ve diğer Excel kütüphaneleri arasındaki tam özellik karşılaştırması için, IronXL özellik sayfasını ziyaret edin.
Microsoft, tanimlanmamis cikisi ayiklama surecindeyken .xlsx dosyalarinin ic yapisini anlamak icin OOXML dosya formatlarini anlama icin iyi bir belgeleri sunmaktadir. IronXL için NuGet paketi de tam sürüm geçmişi ve uyumluluk notları ile birlikte NuGet.org'da listelenmiştir.
Blazor Projeleri için IronXL'ye Nasıl Başlarsınız?
IronXL, herhangi bir zaman sınırı olmadan inşa etmenize ve test etmenize olanak tanıyan ücretsiz bir geliştirme lisansı altında kullanılabilir. Üretim uygulamaları için bir dağıtım lisansı gereklidir.
Bir ücretsiz deneme sürümünü doğrudan NuGet'ten indirebilirsiniz -- başlamak için kayıt gerekmez. Dağıtmaya hazır olduğunuzda, uygulamanın ölçeğine uygun planı bulmak için IronXL lisanslama seçeneklerini gözden geçirin.
IronXL, başlıca tüm .NET uygulama türlerinde çalışır -- Blazor Server, Blazor WebAssembly (sunucu işlenmiş), ASP.NET Core MVC, konsol uygulamaları ve Windows masaüstü uygulamaları. Kütüphane, tüm desteklenen .NET sürümleriyle uyumlu olan .NET Standard 2.0'ı hedefler ve .NET Framework 4.6.2'den .NET 10'a kadar tüm sürümleri destekler. Proje ayrıca PDF oluşturmayı da gerektiriyorsa, IronPDF, IronXL ile uyum içinde entegre olur ve aynı servis katmanından hem Excel hem de PDF dışa aktarımına izin verir.
Daha fazla Blazor'a özel örnek keşfetmek için, Blazor Excel dışa aktarma eğitimi ve ASP.NET Core dışa aktarma rehberine bakın. Mevcut elektronik tabloları okumak için, C# Excel okuma eğitimi yaygın içe aktarma senaryolarını kapsar. Ayrıca projelerin şablonlar yerine programlı bir şekilde dosyalar oluşturması gerektiğinde yeni bir Excel çalışma kitabı oluşturmayı gözden geçirebilirsiniz.
Sıkça Sorulan Sorular
Blazor Server uygulamalarında verileri Excel'e nasıl dışa aktarabilirim?
IronXL'ü kullanarak Blazor Server uygulamalarında verileri Excel'e dışa aktarabilirsiniz. IronXL, Microsoft Office olmadan sunucudan doğrudan Excel dosyaları oluşturmanıza, biçimlendirmenize ve indirmenize olanak tanır.
IronXL'ü Blazor'da kullanmak için Microsoft Office yüklemem gerekiyor mu?
Hayır, Microsoft Office yüklemenize gerek yok. IronXL, Blazor Server uygulamalarında Microsoft Office'ten bağımsız olarak Excel dosyalarını yönetmenize olanak tanır.
IronXL kullanarak Blazor uygulamalarında Excel dosyalarını biçimlendirebilir miyim?
Evet, IronXL, Excel dosyalarını biçimlendirmenizi sağlayan araçlar sunar ve Blazor Server uygulamanızdan doğrudan verilerinizin görünümünü özelleştirmenize olanak tanır.
IronXL, Blazor Server uygulamalarıyla uyumlu mu?
Evet, IronXL, Blazor Server uygulamalarına sorunsuz bir şekilde entegre olur ve Excel dosyalarını kolayca dışa aktarma ve yönetme imkanı sağlar.
Blazor'da Excel dışa aktarma için IronXL kullanmanın faydaları nelerdir?
IronXL, Office gerektirmeden Excel dosyaları oluşturmayı ve yönetmeyi sağlayarak Blazor uygulamalarında veri dışa aktarma için verimli bir çözüm sunar.
IronXL, Blazor Server uygulamalarında büyük Excel dosyalarını yönetebilir mi?
Evet, IronXL, Blazor Server uygulamaları içinde büyük Excel dosyalarını verimli bir şekilde yönetmek için tasarlanmıştır.
Blazor uygulamasında IronXL ile hangi türde Excel dosyaları oluşturabilirim?
IronXL kullanarak, Blazor uygulamanızda XLSX, XLS ve CSV dahil olmak üzere çeşitli türde Excel dosyaları oluşturabilirsiniz.
IronXL kullanarak bir Blazor Server uygulamasından Excel dosyalarını indirmek mümkün müdür?
Evet, IronXL, Blazor Server uygulamasından doğrudan Excel dosyalarını indirmenize olanak tanır ve son kullanıcılara sorunsuz bir deneyim sunar.
IronXL, Blazor'daki Excel dışa aktarma işlevini diğer çözümlere göre nasıl geliştirir?
IronXL, Excel dosyalarını dışa aktarma sürecini basitleştirerek Microsoft Office ihtiyaçını ortadan kaldırır ve sunucu uygulamanızla doğrudan entegre edilir.
IronXL'ü Blazor geliştiricileri için iyi bir seçim yapan nedir?
IronXL, Blazor geliştiricileri için iyi bir seçimdir çünkü güçlü Excel işleme yetenekleri sunar, Office kurulumu gerektirmez ve Blazor Server uygulamalarına kolayca entegre olur.




