IRONSOFTWAREHOME
IRONXL KULLANARAK

Blazor Kullanarak IronXL ile Excel Dosyalarını Nasıl Dışa Aktarılır

Curtis Chau
Curtis Chau
Updated: 28 Haziran 2026

Verileri Excel'e aktarmak, neredeyse her Blazor web uygulamasının ihtiyaç duyduğu bir şeydir - ister satış raporları, ister envanter listeleri, ister müşteri faturaları oluşturuyor olun. Blazor Sunucu uygulamasında, bunu güvenilir bir şekilde yapmak, Microsoft Office gerektirmeden zorlayıcı olabilir. IronXL bunu basitleştirir: Excel dosyalarını doğrudan sunucudan oluşturabilir, biçimlendirebilir ve indirebilirsiniz, Office kurulumu gerekmez. Bu kılavuz, IronXL kullanarak üretime hazır bir Excel dışa aktarma özelliğini Blazor içinde inşa etmenin - proje kurulumundan hizmet tasarımına, ileri formatlama ve çok sayfalı raporlar oluşturmaya kadar - adımlarını anlatır.

Blazor Sunucu Projesinde IronXL Nasıl Kurulur?

Herhangi bir aktarma mantığı yazmadan önce, bir Blazor Sunucu projesine IronXL eklemeniz ve bir tarayıcı yan yükleme yardımcısı yapılandırmanız gerekir.

Blazor Sunucu Projesi Oluşturma

Visual Studio 2022 veya daha sonraki bir sürümde, .NET 10'u hedefleyerek yeni bir Blazor Sunucu projesi oluşturarak başlayın. Proje hazır olduğunda, IronXL'i NuGet Paket Yöneticisi Konsolu aracılığıyla yükleyin.

PM > Install-Package IronXL.Excel

IronXL, .NET 6 ve sonrası ile çalışır, bu nedenle mevcut Blazor projeleri, çerçeveyi yükseltmeden bunu edinebilir. Alternatif kurulum yöntemleri - örneğin NuGet UI veya CLI - için IronXL kurulum kılavuzuna bakın.

JavaScript İndirme Yardımcısını Eklemek

Blazor Sunucu tarafında çalışır, bu yüzden bir dosya indirmeyi tetiklemek küçük bir JavaScript köprüsü gerektirir. Klasörünüzde wwwroot adlı bir dosya ekleyin excelExport.js:

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 scripti _Host.cshtml dosyanıza ekleyin (veya .NET 8+ için App.razor):

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

Bu işlev Blazor'dan bayt akışını geçici bir blob URL'sine dönüştürür, tarayıcı indirmeyi tetikler, ardından bellek sızıntılarını önlemek için URL nesnesini temizler. Kasıtlı olarak minimaldir - zor iş sunucuda C# ile gerçekleşir.

İlk Adım:
arrow pointer

C# İçinde Bir Excel İhracat Servisi Nasıl Oluşturulur?

Excel oluşturmayı Razor bileşenlerinden ayırmak, kodu birden çok sayfada yeniden kullanılabilir ve test edilebilir hale getirir. Aşağıdaki model, IronXL'yi özel bir hizmet sınıfı içine sarar.

ExcelExportService'i Oluşturma

Yeni bir dosya oluşturun Services/ExcelExportService.cs:

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

Hizmeti Kaydetme

Hizmeti DI konteynerine ekleyin Program.cs:

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();

Bu hizmet, IronXL'in birkaç önemli becerisini gösterir. Tek bir metot çağrısı ile yeni workbooklar ve worksheetler oluşturabilirsiniz, stilize edilmiş başlıklar uygulayabilir, herhangi bir veri kaynağından satırları doldurabilir ve =D2*0.15 gibi Excel formülleri gömebilirsiniz. AutoSizeColumn çağrısı, sütunların içeriklerini doğru bir şekilde gösterecek kadar geniş olmasını sağlar, veri uzunluğuna bakılmaksızın. Daha fazla biçimlendirme seçenekleri için, hücre stil rehberine bakın.

Bir Blazor Bileşeninden Excel İndirmeyi Tetikleme Nasıl Yapılır?

Hizmet hazır olduğunda, bunu çağırarak ve oluşan baytları tarayıcıya ileterek bir Razor bileşeni yazmanız gerekir.

Razor Bileşeni Yazma

Şurada bir sayfa oluşturun Pages/ExcelExportDashboard.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)
        {
            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 }
        };
    }
}

Bileşenin Ne Yaptığı

isExporting bayrağı, düğmeyi oluşturma sırasında devre dışı bırakır ve yinelenen taleplerin önlenmesini sağlar. DotNetStreamReference wrapper, .NET bellek akışından JavaScript fonksiyonuna verimli ikili akış sağlar -- bu şekilde büyük base64 dizilerinden kaçınılarak yük boyutunu şişirmez. SalesReport_20260228.xlsx gibi zaman damgalı dosya adları, indirilen dosyaları ek bir yapılandırma olmadan düzenli tutar.

Tarayıcıda /excel-export'a yönlendiğinizde, bir dışa aktarma düğmesiyle kontrol paneli sayfası yüklenir:

Blazor Excel'e Aktarma: IronXL ile C# Kullanarak Tam Rehber: Resim 1 - Örnek Blazor sayfası

Düğmeye tıklamak, elektronik tabloyu oluşturur ve tarayıcı dosyayı otomatik olarak indirir:

Blazor Excel'e Aktarma: IronXL ile C# Kullanarak Tam Rehber: Resim 2 - Excel dosyasına aktarılan veri

Excel İhracatlarına Hangi Gelişmiş Biçimlendirmeleri Uygulayabilirsiniz?

Temel veri ihracatları birçok kullanım durumu için yeterlidir, ancak üretim uygulamaları sıklıkla koşullu biçimlendirme, çoklu çalışma sayfaları veya veri doğrulaması gerektirir. IronXL tüm bunları doğal olarak destekler.

Envanter Raporları için Koşullu Biçimlendirme

Aşağıdaki hizmet, düşük stoklu öğeleri kırmızı ile vurgular -- depo 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();
    }
}

IronXL, hücre bazında biçimlendirmeyi oluşturma zamanında veri değerlerine göre uygular. Ayrıca koşullu biçimlendirme kuralları beyan edebilir veya aynı kitapta çoklu çalışma sayfalarını yönetebilirsiniz -- örneğin, bir sayfa mevcut stok için ve diğeri geçmiş siparişler için.

Tek Bir İhracata Çoklu Çalışma Sayfaları Ekleme

Verileri mantıklı sayfalara ayırmak, ayrı indirme gerektirmeden okunabilirliği arttı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();
}

Defter özelliklerini, aralık işlemlerini ve grafik desteğini kapsayan tam API referansı için IronXL API belgelerine bakın.

Blazor Excel'e Aktarma: IronXL ile C# Kullanarak Tam Rehber: Resim 3 - Gelişmiş özellikler örnek çıktısı

Hataları ve Büyük Veri Kümelerini Etkin Bir Şekilde Nasıl Yönetebilirsiniz?

Excel ihracat işlemleri, veri kümeleri büyük olduğunda sessizce başarısız olabilir veya performansı düşebilir. Aşağıdaki modeller her iki endişeyi de ele alır.

Servis Katmanında Hata Yönetimi

Oluşturma mantığını bileşen yerine servis içinde sarmalamak, tüm çağrıcılar arasında hata yönetimini tutarlı kılar. Önerilen model, IronXL istisnalarının yayılmasını sağlamaktır, ardından başarısız olan hangi raporla ilgili bağlamla bir alan özgü istisna içinde yeniden sarmalamaktır:

try/catch bloğunu workbook oluşturmanın etrafında koyun GenerateSalesReport, Exception yakalayın ve InvalidOperationException("Failed to generate sales report", ex) olarak yeniden fırlatın. Blazor bileşeninde InvalidOperationException yakalayın ve iç detayları açığa vurmadan kullanıcı dostu bir mesaj gösterin. Hizmet yapıcısına enjekte edilen ILogger<t> kullanarak iç istisnayı kaydedin, böylece geliştirme ekibi hataları belirli bir workbook operasyonuna kadar izleyebilir. Son kullanıcılara ham istisna mesajlarını asla yüzeye çıkarmayın -- dosya yolları, bellek adresleri veya yığın izleri sunucu iç mekanını gösterebilir.

Blazor'da yapılandırılmış hata kaydını motive etmek için resmi Microsoft belgelerindeki hata yönetimi en iyi uygulamalarına göz atın. .NET'te test edilebilir hizmetler oluşturma konusunda daha fazla rehber için, Microsoft bağımlık enjeksiyonu belgesi burada kullanılan ExcelExportService ile tam olarak aynı deseni açıklıyor.

Büyük Veri Kümeleri için Performans Düşünceleri

Birkaç bin satırı aşan veri kümeleri için şu yaklaşımları göz önünde bulundurmalısınız:

Excel İhracat Performans Stratejileri
StratejiNe Zaman KullanılırIronXL Desteği
Yanıta doğrudan akışFiles >10 MBworkbook.ToStream()
Verileri ihracattan önce sayfalara bölünFiltrelerle sürülen UI ihracatlarıÇalışma kitabını oluşturmadan önce hizmette uygula
Arka plan işi + indirme bağlantısıReports taking >5 secondsSignalR veya anketle birleştirin
Büyük sayfalarda AutoSizeColumn'u devre dışı bırakınSheets with >500 rowsBunun yerine sabit sütun genişlikleri ayarlayın

IronXL's ToStream() metodu, önce tüm dosyayı bir bayt dizisine yüklemeden doğrudan bir çıktı akışına yazar, bu da büyük workbooklar için bellek kullanımını daha düşük tutar. Ek performans kılavuzu için, IronXL ile büyük Excel dosyalarını okuma ve yazma konularına bakın.

IronXL Başka Hangi Excel Özelliklerini Destekliyor?

Temel ihracatın ötesinde, IronXL gerçek dünyadaki raporlama gereksinimlerini kapsayan geniş bir Excel özellikleri yelpazesi sunar.

Formüller, İsimlendirilmiş Aralıklar ve Sayı Biçimlendirme

Herhangi bir Excel formülünü doğrudan bir hücreye yazacağınızla aynı sözdizimini kullanarak yerleştirebilirsiniz. IronXL formülleri okuma zamanında değerlendirir, böylece oluşturulan dosyanın tüketicileri elektronik tabloyu açar açmaz hesaplanan sonuçları görür. İsimlendirilmiş aralıklar, zamanla formüllerin daha okunabilir ve sürdürülebilir olmasını sağlar:

// 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";

Adlandırılmış aralıkları tanımlamak ve sayı formatını açıkça ayarlamak için IronXL, ikisini de aralık nesnesinde özellikler olarak sunar. Bu, Excel'in para birimi değerlerini düz metin olarak işlememesini engeller -- verilerin dizgi olarak saklandığı veritabanlarından finansal verileri ihraç ederken yaygın bir sorundur.

Desteklenen Excel Dosya Formatları

IronXL, .xlsx, .xls, .csv ve .tsv dahil olmak üzere birden çok Excel formatını okuyabilir ve yazabilir. Format kaydetme zamanında belirlenir, bu nedenle aynı hizmet sınıfı küçük bir parametre değişikliği ile hem Excel hem de CSV ihracatları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);

Bu esneklik, ERP platformları veya veri depoları gibi ardışık sistemlerin belirli bir dosya formatı beklediği entegrasyonlarda önemlidir. IronXL ve diğer Excel kütüphaneleri arasında tam özellik karşılaştırması için IronXL özellikler sayfasına bakın.

Microsoft, debugging sırasında .xlsx dosyalarının iç yapısını anlamanız gerektiğinde OOXML dosya formatlarını anlama için iyi bir referans sağlar. IronXL için NuGet paketi ayrıca NuGet.org üzerinde tam sürüm geçmişi ve uyumluluk notlarıyla listelenmiştir.

Blazor Projeleri İçin IronXL Nasıl Başlanır?

IronXL, herhangi bir zaman sınırlaması olmadan test ve yapı üretmeye izin veren ücretsiz bir geliştirme lisansı altında mevcuttur. Üretim uygulamaları için, bir dağıtım lisansı gereklidir.

NuGet üzerinden doğrudan ücretsiz bir deneme sürümü indir -- başlamak için kayıt gerekmez. Dağıtıma hazır olduğunuzda, uygulamanın ölçeğine uyan planı bulmak için IronXL lisanslama seçeneklerini gözden geçirin.

IronXL, tüm büyük .NET uygulama türlerinde çalışır -- Blazor Server, Blazor WebAssembly (sunucu işleme), ASP.NET Core MVC, konsol uygulamaları, ve Windows masaüstü uygulamaları. Kütüphane, .NET Framework 4.6.2'den .NET 10'a kadar desteklenen her bir .NET sürümü ile uyumlu olan .NET Standard 2.0'ı hedefler. Projenin ayrıca PDF oluşturma gerektirmesi durumunda, IronPDF IronXL ile yan yana entegre edilir, herhangi bir çakışma olmaksızın aynı servis katmanından Excel veya PDF olarak veri ihraç etmenize olanak tanır.

Daha fazla Blazor'a özgü örnek keşfetmek için, Blazor Excel ihracat eğitimine ve ASP.NET Core ihracat kılavuzuna bakın. Mevcut elektronik tabloları okumak için, C# Excel okuyucu eğitimi yaygın ithalat senaryolarını kapsar. Ayrıca, programlama yerine şablonlardan dosyalar oluşturması gereken projeler için sıfırdan yeni bir Excel defteri oluşturmayı gözden geçirebilirsiniz.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez