Altbilgi içeriğine atla
IRONXL KULLANARAK

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);
}
JAVASCRIPT

Bu betigi _Host.cshtml dosyaniza ekleyin (veya .NET 8+ icin App.razor):

<script src="~/excelExport.js"></script>
<script src="~/excelExport.js"></script>
HTML

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.

Şimdi IronXL ile başlayın.
green arrow pointer

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
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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
}
$vbLabelText   $csharpLabel

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.

Blazor Excel'e Verme: IronXL C# Kullanarak Tam Kılavuz: Resim 1 - Örnek Blazor sayfası

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

Blazor Excel'e Verme: IronXL C# Kullanarak Tam Kılavuz: Resim 2 - Verileri Excel dosyasina verme

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Ç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.

Blazor Excel'e Verme: IronXL C# Kullanarak Tam Kılavuz: Resim 3 - Gelişmiş özelliklerin örnek cikisi

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:

Excel Dışa Aktarma Performans Stratejileri
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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.

Jordi Bardia
Yazılım Mühendisi
Jordi Python, C# ve C++ konularında en yetkin, Iron Software'deki yeteneklerini kullanmadığı zamanlarda; oyun programlıyor. Ürün testi, ürün geliştirme ve araştırma sorumluluklarını paylaşan Jordi, sürekli ürün gelişimine büyük değer katıyor. Çeşitli deneyimleri onu ...
Daha Fazlasını Oku

Iron Destek Ekibi

Haftanın 5 günü, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara