Altbilgi içeriğine atla
IRONXL KULLANARAK

IronXL Kullanarak Blazor Uygulamasında Excel'e Nasıl Aktarılır

İster raporlar oluşturmak, envanter listeleri veya müşteri faturaları oluşturmak olsun, neredeyse her web uygulaması verileri Excel'e dışa aktarmaya ihtiyaç duyar. Blazor Server uygulamasında, bunu Microsoft Office gerektirmeden güvenilir bir şekilde gerçekleştirmek zorlayıcı olabilir. Orada IronXL devreye giriyor. Sunucunuzdan doğrudan Excel dosyaları oluşturmanıza, biçimlendirmenize ve indirmenize olanak tanır, Office kurulumu gerektirmez ve Blazor ile kesintisiz bir şekilde entegre olur. Bu rehberde, uygulamanıza profesyonel bir Excel dışa aktarma özelliği eklemenin ne kadar basit olduğunu göreceksiniz. Haydi başlayalım.

Verileri Excel'e Dışa Aktarmak için IronXL ile Başlarken

Blazor Server uygulamasında IronXL ayarlamak en az yapılandırmayı gerektirir. Visual Studio 2022 veya üstünde, .NET 6 veya üzerini hedefleyen yeni bir Blazor Server projesi oluşturarak başlayın.

NuGet Package Manager Console üzerinden IronXL'yi kurun (alternatif yöntemler için tam kurulum kılavuzumuza bakın):

Install-Package IronXl.Excel

Sonra, dosya indirme için bir JavaScript yardımcı fonksiyonu oluşturun. wwwroot klasörünüzde yeni bir excelExport.js adlı JavaScript dosyası 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 betiği _Host.cshtml dosyanıza dahil edin:

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

Bu JavaScript fonksiyonu, Blazor Server uygulamanızdan gelen bayt akışını indirilir bir dosyaya dönüştürerek tarayıcı tarafı indirme mekanizmasını ele alır. Fonksiyon geçici bir blok URL'si oluşturur, indirmeyi tetikler ve bellek sızıntılarını önlemek için kaynakları temizler.

IronXL ile Veri Kaynağını Excel Dosyalarına Nasıl Dışa Aktarırsınız?

İş mantığınızı ele almak için bir Excel dışa aktarma servisi oluşturun. Bu servis, IronXL işlevselliğini kapsar ve sizin Blazor Excel ihracat uygulamanızda farklı ihracat senaryoları için yeniden kullanılabilir yöntemler sağlar:

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);
        }
    }
}
Imports IronXL
Imports System.IO
Imports ExportExcel.Models

Public Class ExcelExportService
    Public Function GenerateSalesReport(salesData As List(Of SalesData)) As Byte()
        Try
            Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
            workbook.Metadata.Author = "Sales Department"
            Dim worksheet = workbook.CreateWorkSheet("Monthly Sales")
            worksheet("A1").Value = "Date"
            worksheet("B1").Value = "Product"
            worksheet("C1").Value = "Quantity"
            worksheet("D1").Value = "Revenue"
            worksheet("E1").Value = "Profit Margin"
            Dim headerRange = worksheet("A1:E1")
            headerRange.Style.Font.Bold = True
            headerRange.Style.BackgroundColor = "#4472C4"
            headerRange.Style.Font.Color = "#FFFFFF"
            Dim row As Integer = 2
            For Each sale In salesData
                worksheet($"A{row}").Value = sale.Date.ToString("yyyy-MM-dd")
                worksheet($"B{row}").Value = If(sale.Product, "Unknown")
                worksheet($"C{row}").Value = sale.Quantity
                worksheet($"D{row}").Value = sale.Revenue
                worksheet($"E{row}").Value = $"=D{row}*0.15"
                row += 1
            Next
            worksheet.AutoSizeColumn(0, True)
            Using ms = workbook.ToStream()
                Return ms.ToArray()
            End Using
        Catch ex As Exception
            ' If the program fails to return file
            Throw New InvalidOperationException("Failed to generate sales report", ex)
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

Bu servis, yeni çalışma kitapları ve çalışma sayfaları oluşturmayı, biçimlendirilmiş başlıklar eklemeyi, veri kaynağınızdan içe aktarılan verilerle veri satırlarını doldurmayı, formüller uygulamayı ve potansiyel hataları ele almayı da içeren önemli IronXL özelliklerini göstermektedir. AutoSizeColumn yöntemi, içerik uzunluğuna bakılmaksızın sütunların düzgün bir şekilde görüntülenmesini sağlar. Daha gelişmiş biçimlendirme seçenekleri için, hücre stil rehberimize göz atın.

Dosya İndirmesini Blazor'da Nasıl Uygularsınız?

Dışa aktarma servisini kullanan ve kullanıcı etkileşimini ele alan bir Razor bileşeni 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 = "";
            // 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 }
        };
    }
}
@page "/excel-export"
@Imports 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 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 = ""
            ' Generate sample data - replace with actual data source
            Dim salesData = GetSalesData()
            ' Generate Excel file
            Dim fileBytes = ExcelService.GenerateSalesReport(salesData)
            ' Trigger download using a memory stream to handle the file
            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."
            ' Log exception details for debugging
        Finally
            isExporting = False
        End Try
    End Function

    Private Function GetSalesData() As List(Of SalesData)
        ' Return your actual data here
        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

Bu bileşen, dışa aktarma sırasında kullanıcı geri bildirimlerini sağlar, hataları nazikçe ele alır ve zaman damgalı dosya adları oluşturur. DotNetStreamReference sarmalayıcı, ikili verilerin JavaScript'e verimli bir şekilde akışını sağlar.

Çıktı

Kodumuzu çalıştırdığımızda, dışa aktarma işlemini ele almak için kullanılacak düğme ile sayfamızın yüklendiğini göreceğiz.

Blazor'da IronXL kullanarak Excel'e Nasıl Aktarım Yapılır: Şekil 1 - Örnek Blazor sayfası

Düğmeye tıkladığımızda, veriler yeni bir Excel belgesinde kaydedilecek ve dışa aktarılan dosya indirilecektir.

Blazor'da IronXL kullanarak Excel'e Nasıl Aktarım Yapılır: Şekil 2 - Veriler bir Excel dosyasına aktarıldı

IronXL'nin Excel Dışa Aktarma için Ekleyebileceği Gelişmiş Özellikler Nelerdir?

IronXL, profesyonel görünümlü dışa aktarmalar için sofistike Excel özelliklerini destekler. Bir envanter yönetim senaryosu için, koşullu biçimlendirme ve birden fazla çalışma sayfası ekleyebilirsiniz:

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();
        }
    }
}
Imports IronXL
Imports ExportExcel.Models
Imports System.IO

Namespace ExportExcel.Services
    Public Class InventoryExportService
        Public Function GenerateInventoryReport(items As List(Of InventoryItem)) As Byte()
            Dim workbook = WorkBook.Create()
            Dim details = workbook.CreateWorkSheet("Inventory Details")
            ' Add headers
            details("A1").Value = "SKU"
            details("B1").Value = "Name"
            details("C1").Value = "Quantity"
            ' Apply bold font for headers
            Dim headerRange = details("A1:C1")
            headerRange.Style.Font.Bold = True
            For i As Integer = 0 To items.Count - 1
                Dim row = i + 2 ' start from row 2
                Dim 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 Then
                    details($"C{row}").Style.BackgroundColor = "#FFB6B6"
                End If
            Next
            Using stream = workbook.ToStream()
                Return stream.ToArray()
            End Using
        End Function
    End Class
End Namespace
$vbLabelText   $csharpLabel

IronXL, birden fazla çalışma sayfasını zorlanmadan ele alır, iş kurallarına dayanarak koşullu biçimlendirme uygular ve gerektiğinde pivot tablolar ve grafikler gibi gelişmiş Excel özelliklerini destekler. Detaylı API belgeleri için, kapsamlı referans kılavuzumuza göz atın.

Blazor'da IronXL kullanarak Excel'e Nasıl Aktarım Yapılır: Şekil 3 - Gelişmiş özellikler örnek çıktısı

Sonuç

IronXL, Blazor Server uygulamalarında Excel dosya oluşturmayı karmaşık bir zorluktan basit bir göreve dönüştürür. Kullanıcı dostu API'si, Microsoft Office yüklemelerine ihtiyaç duymadan gelişmiş Excel özelliklerine erişim sağlar. Basit veri dışa aktarmalardan formüller ve biçimlendirme içeren karmaşık çok sayfalı raporlara kadar, IronXL hepsini mükemmel performans ve güvenilirlikle yönetir.

Blazor uygulamalarınızı profesyonel Excel dışa aktarma özellikleriyle geliştirmeye hazır mısınız? Üretim dağıtımı için ücretsiz denemenizi başlatın.

Sıkça Sorulan Sorular

Blazor Sunucu uygulamasında Excel dosyalarını nasıl dışa aktarabilirim?

Blazor Sunucu uygulamasında Excel dosyalarını dışa aktarmak için IronXL kullanabilirsiniz. IronXL, Office olmadan doğrudan sunucunuzdan Excel dosyaları oluşturmanıza, biçimlendirmenize ve indirmenize olanak tanir.

Blazor'da Excel dosyaları ile çalışmak için Microsoft Office'e ihtiyaçım var mı?

Hayır, IronXL, Blazor uygulamanızda Microsoft Office gerektirmeden Excel dosyaları ile çalışmanıza olanak tanir. Excel dosyalarını doğrudan oluşturma ve değiştirme işlevselliğini sağlar.

Blazor'da Excel dışa aktarma için IronXL kullanmanın faydaları nelerdir?

IronXL, Blazor ile sorunsuz entegrasyon sağlar, Excel dosyaları oluşturma, biçimlendirme ve dışa aktarma işlemlerini kolaylaştırır. Süreci basitleştirir, Microsoft Office ihtiyaçını ortadan kaldırır ve çeşitli Excel formatlarını destekler.

IronXL diğer Blazor bileşenleriyle entegre edilebilir mi?

Evet, IronXL, Blazor bileşenleriyle sorunsuz bir şekilde entegre olur ve uygulamalarınıza kolaylıkla Excel dışa aktarma işlevselliği eklemenizi sağlar.

IronXL kullanarak Blazor'da Excel dosyalarını biçimlendirmek mümkün mü?

Evet, IronXL, Excel dosyalarını biçimlendirmek için kapsamlı özellikler sunar, hücreleri biçimlendirme, sütun genişliklerini ayarlama ve karmaşık formüller oluşturma gibi işlemleri Blazor Sunucu uygulaması içerisinde yapabilirsiniz.

Blazor'da Excel'e dışa aktarırken büyük veri kümeleri nasıl işlenir?

IronXL, Blazor Sunucu ortamında geniş verileri Excel dosyalarına dışa aktarırken üstün performansı sağlayarak büyük veri kümelerini verimli bir şekilde işlemek için tasarlanmıştır.

IronXL hangi Excel dosya formatlarını destekler?

IronXL, Blazor uygulamalarınızda Excel verilerini nasıl dışa aktaracağınız ve çalışacağınız konusunda size esneklik sağlayarak çeşitli Excel dosya formatlarını (XLS, XLSX ve CSV dahil) destekler.

IronXL, Blazor'da raporlar oluşturmak için kullanılabilir mi?

Kesinlikle, IronXL, Blazor uygulamalarında ayrıntılı raporlar oluşturmak için idealdir. Profesyonel Excel raporları oluşturmak, biçimlendirmek ve dışa aktarmak için sağlam özellikler sunar.

IronXL, Excel dosyaları dışa aktarılırken veri bütünlüğünü nasıl sağlar?

IronXL, dışa aktarma işlemi sırasında verilerinizin yapısını ve biçimlendirmesini doğru bir şekilde koruyarak veri bütünlüğünü sağlar ve Blazor uygulamaları için güvenilir bir çözüm sunar.

IronXL kullanarak Blazor Sunucu uygulamasında Excel dosya oluşturulmasını otomatikleştirmek mümkün mü?

Evet, IronXL, Blazor Sunucu uygulamalarında Excel dosyalarının oluşturulması ve dışa aktarılmasını otomatikleştirmek için kullanılabilir, böylece iş akışlarını basitleştirir ve verimliliği artırır.

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