Altbilgi içeriğine atla
IRONXL KULLANARAK

C# içinde CSV İçe Aktarımı | ASP.NET Core Eğitimi | IronXL

ASP.NET Core ile C#'ta bir CSV dosyası içe aktarmak, bir dosya akışını okuma, ayrılmış satırları ayrıştırma ve her kaydı yazılmış bir nesneye eşleme anlamına gelir - verilerle ilgili işe yarar bir şey yapmadan önce. IronXL, CSV, XLSX ve TSV dosyaları için eşit derecede iyi çalışan tek bir API aracılığıyla her adımı yürütür, bu nedenle zamanınızı uygulama mantığına odaklarsınız, kenar durumlarını string ayırmak yerine.

Ücretsiz denemenizi başlatın ve bu kod örneklerini kendi ortamınızda test edin.

Bir .NET Projesine IronXL Nasıl Kurulur?

Herhangi bir ayrıştırma kodu yazmadan önce, IronXL'i projenize ekleyin. Visual Studio'daki Paket Yöneticisi Konsolu'nu veya proje dizininizdeki bir terminali açın ve aşağıdaki komutlardan birini çalıştırın:

Install-Package IronXl.Excel
dotnet add package IronXl.Excel
Install-Package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

Paket, .NET 10, .NET 6+, .NET Framework 4.6.2+ ve .NET Standard 2.0'a yöneliktir, bu nedenle herhangi bir modern proje türüne uyar. Sunucuda Microsoft Office kurulumu gerekmez. Paket geri yüklendikten sonra, kütüphaneyi çağıran dosyanın en üstüne using IronXL; ekleyin.

Küresel araç kurulumu ve CI/CD iş hattı yapılandırması dahil ayrıntılı kurulum seçenekleri için IronXL kurulum kılavuzuna bakın.

ASP.NET Core'da Bir CSV Dosyası Nasıl İçe Aktarılır?

ASP.NET Core'da bir CSV dosyası içe aktarmak, sunucudan dosya akışını okumak, her satırı ayrıştırmak ve değerleri bir model sınıfa eşlemek gerektirir. Bazı geliştiriciler manuel StreamReader uygulamaları veya üçüncü taraf paketlere yönelse de, IronXL ekstra yapılandırmaya ihtiyaç duymadan CSV dosyalarını Excel formatlarıyla işleyen tek bir yöntem sunar.

Aşağıdaki kod, IronXL'nin WorkBook.LoadCSV yöntemini kullanarak bir CSV dosyasını nasıl yükleneceğini gösterir:

using IronXL;

// Load the CSV file directly using the full file path
var csv = WorkBook.LoadCSV("products.csv");
WorkSheet worksheet = csv.DefaultWorkSheet;

// Access CSV data by iterating through rows
foreach (var row in worksheet.Rows)
{
    string productName = row.Columns[1].StringValue;
    decimal price = row.Columns[2].DecimalValue;
    Console.WriteLine($"Product: {productName}, Price: {price}");
}
using IronXL;

// Load the CSV file directly using the full file path
var csv = WorkBook.LoadCSV("products.csv");
WorkSheet worksheet = csv.DefaultWorkSheet;

// Access CSV data by iterating through rows
foreach (var row in worksheet.Rows)
{
    string productName = row.Columns[1].StringValue;
    decimal price = row.Columns[2].DecimalValue;
    Console.WriteLine($"Product: {productName}, Price: {price}");
}
Imports IronXL

' Load the CSV file directly using the full file path
Dim csv = WorkBook.LoadCSV("products.csv")
Dim worksheet As WorkSheet = csv.DefaultWorkSheet

' Access CSV data by iterating through rows
For Each row In worksheet.Rows
    Dim productName As String = row.Columns(1).StringValue
    Dim price As Decimal = row.Columns(2).DecimalValue
    Console.WriteLine($"Product: {productName}, Price: {price}")
Next
$vbLabelText   $csharpLabel

WorkBook.LoadCSV Yöntemini Anlama

WorkBook.LoadCSV yöntemi, CSV dosyasını okur ve her satırı bir satır, her sınırlı değeri bir hücreye dönüştüren bir çalışma sayfası oluşturur. IronXL, ayırıcıyı (virgül, noktalı virgül veya sekme) otomatik olarak algılar ve değer içinde virgül içeren tırnak işaretiyle çevrilmiş alanları yönetir. Standart CSV dosyaları için bir ayırıcıyı manuel olarak yapılandırmanız gerekmez.

StringValue, DecimalValue, IntValue ve DateTimeValue gibi hücre değeri erişicileri, int.TryParse veya decimal.Parse ile manuel ayrıştırma yapmanıza gerek kalmadan tür dönüşümünü ele alır. Bir hücre boş olduğunda veya tanınmayan bir değer içerdiğinde, bu erişiciler türün varsayılan değerini döndürür ve bu durum büyük ölçekli veri aktarım işlemleri sırasında kontrolsüz hataları önler.

Bu yaklaşım, tırnak işaretiyle kaçıralan karakterler, Windows tarzı satır sonları ve çok satırlı hücre değerleri gibi özel durumda bulunan manuel string ayrıştırmayı ortadan kaldırır. Desteklenen formatlar ve ayırıcı seçenekleri hakkında daha fazla ayrıntı için IronXL CSV belgelerine bakın.

ASP Import CSV: A Complete C# Developer's Guide: Görsel 1 - Basit bir CSV dosyasını içe aktarma ve çıktıyı konsolda okuma

CSV Verisi İçin Bir Model Sınıfı Nasıl Oluşturursunuz?

CSV verilerini güçlü bir şekilde türlendirilmiş nesnelere eşlemek, dosya yapısını yansıtan bir model sınıfı gerektirir. Hammadde dize verilerini, tam sayılar, ondalık sayılar ve DateTime değerleri gibi belirli türlere dönüştürürsünüz. Ürün envanteri verileri için, her CSV sütununa karşılık gelen özelliklere sahip bir sınıf oluşturun:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public decimal Price { get; set; }
    public int Quantity { get; set; }
}
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; } = string.Empty;
    public decimal Price { get; set; }
    public int Quantity { get; set; }
}
Public Class Product
    Public Property Id As Integer
    Public Property Name As String = String.Empty
    Public Property Price As Decimal
    Public Property Quantity As Integer
End Class
$vbLabelText   $csharpLabel

CSV Satırlarını Tip Koleksiyonlarına Ayrıştırma

Model sınıfı tanımlandıktan sonra, CSV kayıtlarını bir tip koleksiyona ayrıştırabilirsiniz. Örnek, başlık satırını bir döngü indeksi kullanarak atlar ve her bir sonrasındaki satırı Product nesnesine map eder:

using IronXL;

WorkBook workbook = WorkBook.LoadCSV("inventory.csv");
WorkSheet ws = workbook.DefaultWorkSheet;
var records = new List<Product>();

// Skip header row (index 0), iterate through data rows
for (int i = 1; i < ws.Rows.Count(); i++)
{
    var row = ws.Rows[i];
    var product = new Product
    {
        Id = row.Columns[0].IntValue,
        Name = row.Columns[1].StringValue,
        Price = row.Columns[2].DecimalValue,
        Quantity = row.Columns[3].IntValue
    };
    records.Add(product);
}

Console.WriteLine($"Loaded {records.Count} products.");
using IronXL;

WorkBook workbook = WorkBook.LoadCSV("inventory.csv");
WorkSheet ws = workbook.DefaultWorkSheet;
var records = new List<Product>();

// Skip header row (index 0), iterate through data rows
for (int i = 1; i < ws.Rows.Count(); i++)
{
    var row = ws.Rows[i];
    var product = new Product
    {
        Id = row.Columns[0].IntValue,
        Name = row.Columns[1].StringValue,
        Price = row.Columns[2].DecimalValue,
        Quantity = row.Columns[3].IntValue
    };
    records.Add(product);
}

Console.WriteLine($"Loaded {records.Count} products.");
Imports IronXL

Dim workbook As WorkBook = WorkBook.LoadCSV("inventory.csv")
Dim ws As WorkSheet = workbook.DefaultWorkSheet
Dim records As New List(Of Product)()

' Skip header row (index 0), iterate through data rows
For i As Integer = 1 To ws.Rows.Count() - 1
    Dim row = ws.Rows(i)
    Dim product As New Product With {
        .Id = row.Columns(0).IntValue,
        .Name = row.Columns(1).StringValue,
        .Price = row.Columns(2).DecimalValue,
        .Quantity = row.Columns(3).IntValue
    }
    records.Add(product)
Next

Console.WriteLine($"Loaded {records.Count} products.")
$vbLabelText   $csharpLabel

records koleksiyonu artık veritabanı işlemleri, JSON serileştirme veya ek iş mantığı için hazır türlendirilmiş Product nesneleri içerir. IronXL'nin hücre değeri erişiçileri, isteğe bağlı alanlar için boş işlem dahil olmak üzere tür dönüşümünü otomatik olarak yönetir.

Opsiyonel ve Null Olan Alanları Yönetme

Gerçek dünyadaki CSV dosyaları genellikle boş hücreler veya opsiyonel sütunlar içerir. IronXL'nin değer erişicileri, bir hücre boş olduğunda istisnalar yerine varsayılan değerler döndürür. Null olabilen türler için, bir koşullu kontrol kullanabilirsiniz:

// Reading an optional DateTime field
DateTime? lastUpdated = string.IsNullOrEmpty(row.Columns[4].StringValue)
    ? null
    : row.Columns[4].DateTimeValue;
// Reading an optional DateTime field
DateTime? lastUpdated = string.IsNullOrEmpty(row.Columns[4].StringValue)
    ? null
    : row.Columns[4].DateTimeValue;
' Reading an optional DateTime field
Dim lastUpdated As DateTime? = If(String.IsNullOrEmpty(row.Columns(4).StringValue), Nothing, row.Columns(4).DateTimeValue)
$vbLabelText   $csharpLabel

Bu desen, her hücre erişimini try-catch bloğuna sarmadan içerik kodunuzu savunmacı tutar. Karmaşık veri türleri ve büyük dosyaların işlenmesine ilişkin kılavuz için IronXL WorkSheet dokümantasyonu adresini ziyaret edin.

Bir Web API'sinde CSV Dosya Yüklemelerini Nasıl Yönetirsiniz?

Bir tarayıcıdan CSV dosya yüklemelerini kabul eden bir API uç noktası oluşturmak, ASP.NET Core'un IFormFile ile IronXL'nin ayrıştırma yeteneklerini birleştirmeyi gerektirir. Aşağıdaki kod, yüklenen dosyayı ayrıştıran ve JSON yanıtı döndüren tam bir denetleyici uygulamasını gösterir:

using IronXL;
using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
[ApiController]
public class CsvController : ControllerBase
{
    [HttpPost("upload")]
    public async Task<IActionResult> UploadCsv(IFormFile file)
    {
        if (file == null || file.Length == 0)
            return BadRequest("Please upload a valid CSV file.");

        try
        {
            using var stream = new MemoryStream();
            await file.CopyToAsync(stream);
            stream.Position = 0;

            WorkBook workbook = WorkBook.Load(stream, "csv");
            WorkSheet ws = workbook.DefaultWorkSheet;
            var records = new List<Product>();

            // Skip header row, iterate through data rows
            for (int i = 1; i < ws.Rows.Count(); i++)
            {
                var row = ws.Rows[i];
                records.Add(new Product
                {
                    Id = row.Columns[0].IntValue,
                    Name = row.Columns[1].StringValue,
                    Price = row.Columns[2].DecimalValue,
                    Quantity = row.Columns[3].IntValue
                });
            }

            return Ok(new
            {
                message = "Import successful",
                count = records.Count,
                data = records
            });
        }
        catch (Exception ex)
        {
            return BadRequest($"Error processing file: {ex.Message}");
        }
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
[ApiController]
public class CsvController : ControllerBase
{
    [HttpPost("upload")]
    public async Task<IActionResult> UploadCsv(IFormFile file)
    {
        if (file == null || file.Length == 0)
            return BadRequest("Please upload a valid CSV file.");

        try
        {
            using var stream = new MemoryStream();
            await file.CopyToAsync(stream);
            stream.Position = 0;

            WorkBook workbook = WorkBook.Load(stream, "csv");
            WorkSheet ws = workbook.DefaultWorkSheet;
            var records = new List<Product>();

            // Skip header row, iterate through data rows
            for (int i = 1; i < ws.Rows.Count(); i++)
            {
                var row = ws.Rows[i];
                records.Add(new Product
                {
                    Id = row.Columns[0].IntValue,
                    Name = row.Columns[1].StringValue,
                    Price = row.Columns[2].DecimalValue,
                    Quantity = row.Columns[3].IntValue
                });
            }

            return Ok(new
            {
                message = "Import successful",
                count = records.Count,
                data = records
            });
        }
        catch (Exception ex)
        {
            return BadRequest($"Error processing file: {ex.Message}");
        }
    }
}
Imports IronXL
Imports Microsoft.AspNetCore.Mvc
Imports System.IO
Imports System.Threading.Tasks

<Route("api/[controller]")>
<ApiController>
Public Class CsvController
    Inherits ControllerBase

    <HttpPost("upload")>
    Public Async Function UploadCsv(file As IFormFile) As Task(Of IActionResult)
        If file Is Nothing OrElse file.Length = 0 Then
            Return BadRequest("Please upload a valid CSV file.")
        End If

        Try
            Using stream As New MemoryStream()
                Await file.CopyToAsync(stream)
                stream.Position = 0

                Dim workbook As WorkBook = WorkBook.Load(stream, "csv")
                Dim ws As WorkSheet = workbook.DefaultWorkSheet
                Dim records As New List(Of Product)()

                ' Skip header row, iterate through data rows
                For i As Integer = 1 To ws.Rows.Count() - 1
                    Dim row = ws.Rows(i)
                    records.Add(New Product With {
                        .Id = row.Columns(0).IntValue,
                        .Name = row.Columns(1).StringValue,
                        .Price = row.Columns(2).DecimalValue,
                        .Quantity = row.Columns(3).IntValue
                    })
                Next

                Return Ok(New With {
                    .message = "Import successful",
                    .count = records.Count,
                    .data = records
                })
            End Using
        Catch ex As Exception
            Return BadRequest($"Error processing file: {ex.Message}")
        End Try
    End Function
End Class
$vbLabelText   $csharpLabel

Uç Noktayı ve Çok Parçalı Formu Yapılandırma

[HttpPost("upload")] işleminin dosya yüklemelerini kabul edebilmesi için projenin çok parçalı form verilerini desteklemesi gerekir. Minimal API kurulumu için Program.cs içinde, builder.Services.AddControllers() ve app.MapControllers() çağrıldığından emin olun. Uç nokta, /api/csv/upload adresinde erişilebilir hale gelir.

Bir tarayıcı formundan test ederken formun enctype özniteliğini multipart/form-data yapın ve bir dosya girişi öğesi kullanın. Postman gibi API müşterileri için, istek gövdesinde "form-data" seçeneğini seçin, file adlı bir anahtar ekleyin ve CSV dosyasını ekleyin. Denetleyici, kayıt sayısını ve istemci tarafı JavaScript'in hemen kullanabileceği ayrıştırılmış veri dizisini içeren bir JSON nesnesi döndürür.

ASP Import CSV: A Complete C# Developer's Guide: Görsel 2 - İçe aktarılan CSV dosyasından okunan verilerle başarılı çıktı

Dosya Türünü Ayrıştırmadan Önce Doğrulama

IronXL'ye akışı iletmadan önce CSV olmayan yüklemeleri reddetmek için dosya uzantısını doğrulayın:

var extension = Path.GetExtension(file.FileName).ToLowerInvariant();
if (extension != ".csv" && extension != ".txt")
    return BadRequest("Only CSV files are accepted.");
var extension = Path.GetExtension(file.FileName).ToLowerInvariant();
if (extension != ".csv" && extension != ".txt")
    return BadRequest("Only CSV files are accepted.");
Dim extension As String = Path.GetExtension(file.FileName).ToLowerInvariant()
If extension <> ".csv" AndAlso extension <> ".txt" Then
    Return BadRequest("Only CSV files are accepted.")
End If
$vbLabelText   $csharpLabel

Bu kontrol, bozuk ikili verilerin ayrıştırıcıya ulaşmasını önler ve API tüketicilerine net bir hata mesajı sağlar. MIME türünü daha sıkı bir şekilde uygulamak için file.ContentType kullanarak bu doğrulamayı genişletebilirsiniz.

CSV Verilerini Bir Veritabanına Nasıl Kaydederiz?

CSV dosyalarını türlendirilmiş nesnelere ayrıştırdıktan sonra, kayıtları genellikle bir veritabanına kalıcı hale getirirsiniz. Aşağıdaki örnek, toplu eklemeler için Entity Framework Core'un AddRangeAsync kullanarak hizmet katmanı desenini genişletir:

using IronXL;

public class CsvImportService
{
    private readonly AppDbContext _context;

    public CsvImportService(AppDbContext context)
    {
        _context = context;
    }

    public async Task<int> ImportProductsAsync(Stream csvStream)
    {
        WorkBook workbook = WorkBook.LoadCSV(csvStream);
        WorkSheet ws = workbook.DefaultWorkSheet;
        var products = new List<Product>();

        foreach (var row in ws.Rows.Skip(1))
        {
            products.Add(new Product
            {
                Id = row.Columns[0].IntValue,
                Name = row.Columns[1].StringValue,
                Price = row.Columns[2].DecimalValue,
                Quantity = row.Columns[3].IntValue
            });
        }

        await _context.Products.AddRangeAsync(products);
        return await _context.SaveChangesAsync();
    }
}
using IronXL;

public class CsvImportService
{
    private readonly AppDbContext _context;

    public CsvImportService(AppDbContext context)
    {
        _context = context;
    }

    public async Task<int> ImportProductsAsync(Stream csvStream)
    {
        WorkBook workbook = WorkBook.LoadCSV(csvStream);
        WorkSheet ws = workbook.DefaultWorkSheet;
        var products = new List<Product>();

        foreach (var row in ws.Rows.Skip(1))
        {
            products.Add(new Product
            {
                Id = row.Columns[0].IntValue,
                Name = row.Columns[1].StringValue,
                Price = row.Columns[2].DecimalValue,
                Quantity = row.Columns[3].IntValue
            });
        }

        await _context.Products.AddRangeAsync(products);
        return await _context.SaveChangesAsync();
    }
}
Imports IronXL

Public Class CsvImportService
    Private ReadOnly _context As AppDbContext

    Public Sub New(context As AppDbContext)
        _context = context
    End Sub

    Public Async Function ImportProductsAsync(csvStream As Stream) As Task(Of Integer)
        Dim workbook As WorkBook = WorkBook.LoadCSV(csvStream)
        Dim ws As WorkSheet = workbook.DefaultWorkSheet
        Dim products As New List(Of Product)()

        For Each row In ws.Rows.Skip(1)
            products.Add(New Product With {
                .Id = row.Columns(0).IntValue,
                .Name = row.Columns(1).StringValue,
                .Price = row.Columns(2).DecimalValue,
                .Quantity = row.Columns(3).IntValue
            })
        Next

        Await _context.Products.AddRangeAsync(products)
        Return Await _context.SaveChangesAsync()
    End Function
End Class
$vbLabelText   $csharpLabel

Servisi Bağımlılık Enjeksiyonuna Bağlama

Denetleyicinin Program.cs üzerine CsvImportService kaydedin ki denetleyici bunu inşaatçı enjeksiyonu ile talep edebilsin:

builder.Services.AddScoped<CsvImportService>();
builder.Services.AddScoped<CsvImportService>();
$vbLabelText   $csharpLabel

Daha sonra, içinde listeyi satır içi olarak oluşturmadan hizmeti kabul etmek ve ImportProductsAsync çağırmak için denetleyici yapısını güncelleyin. Bu ayrım, denetleyici işlemlerini ince tutar ve veri erişim mantığını test edilebilir bir hizmet sınıfına taşır. Entity Framework Core, AddRangeAsync çağrısını her toplu işlem başına tek bir INSERT ifadesi şeklinde gruplar, bu da binlerce satır içeren CSV dosyaları için iyi performans gösterir.

Çok büyük içe aktarımlar (on binlerce satır) için EF Core Bulk Extensions veya veritabanına gidiş-dönüşleri azaltmak için ham bir SQL BULK INSERT ifadesi kullanmayı düşünün.

IronXL Kullanarak Verileri CSV'ye Nasıl Geri Aktarabilirsiniz?

IronXL yalnızca CSV dosyalarını okumakla sınırlı değil, aynı zamanda onları yazar. SaveAsCsv yöntemi, raporlar oluşturmak veya aşağı akış sistemlerine veri göndermek için kullanışlı olan herhangi bir çalışma sayfasını bir CSV dosyasına dışa aktarır:

using IronXL;

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLS);
WorkSheet ws = workbook.DefaultWorkSheet;

// Write headers
ws["A1"].Value = "Id";
ws["B1"].Value = "Name";
ws["C1"].Value = "Price";

// Write data rows
ws["A2"].Value = 1;
ws["B2"].Value = "Widget A";
ws["C2"].Value = 9.99;

ws["A3"].Value = 2;
ws["B3"].Value = "Widget B";
ws["C3"].Value = 14.49;

// Save as CSV
workbook.SaveAsCsv("export.csv");
Console.WriteLine("CSV export complete.");
using IronXL;

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLS);
WorkSheet ws = workbook.DefaultWorkSheet;

// Write headers
ws["A1"].Value = "Id";
ws["B1"].Value = "Name";
ws["C1"].Value = "Price";

// Write data rows
ws["A2"].Value = 1;
ws["B2"].Value = "Widget A";
ws["C2"].Value = 9.99;

ws["A3"].Value = 2;
ws["B3"].Value = "Widget B";
ws["C3"].Value = 14.49;

// Save as CSV
workbook.SaveAsCsv("export.csv");
Console.WriteLine("CSV export complete.");
Imports IronXL

Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLS)
Dim ws As WorkSheet = workbook.DefaultWorkSheet

' Write headers
ws("A1").Value = "Id"
ws("B1").Value = "Name"
ws("C1").Value = "Price"

' Write data rows
ws("A2").Value = 1
ws("B2").Value = "Widget A"
ws("C2").Value = 9.99

ws("A3").Value = 2
ws("B3").Value = "Widget B"
ws("C3").Value = 14.49

' Save as CSV
workbook.SaveAsCsv("export.csv")
Console.WriteLine("CSV export complete.")
$vbLabelText   $csharpLabel

Dışa aktarılan dosya varsayılan olarak virgül ayırıcıları kullanır. Avrupa bölgelerinde yaygın olan noktalı virgül ile sınırlı dosyalar için, açık bir sınırlayıcı argümanı ile SaveAsCsv("export.csv", ";") çağırın. File(stream, "text/csv", "export.csv") kullanarak çıktıyı bir dosya indirmesi olarak bir API uç noktasından geri döndürebileceğiniz MemoryStream olarak da kaydedebilirsiniz.

İhracat seçenekleri hakkında tam bir referans için IronXL saklama ve dışa aktarma dokümantasyonunu ziyaret edin.

Neden IronXL Elle CSV Ayrıştırmadan Daha İyi Bir Seçenek?

Elle CSV ayrıştırma, tırnak işaretleri içinde sarılmış virgüller içeren değerler, bir hücreye gömülü yeni satırlar, kaçış tırnak işaretleri ve UTF-8 dosyalarının başındaki bayt sırası işaretleri gibi uç durumlarla karşılaşana kadar basit görünür. Özelleştirilmiş bir StreamReader döngüsünde bunların tümünü doğru bir şekilde ele almak ciddi ölçüde test ve sürekli bakım gerektirir.

IronXL, tüm bu durumları dahili olarak ele alır. İki yaklaşımı karşılaştırmak, net avantajlar gösterir:

IronXL vs. Manuel StreamReader C#'ta CSV Ayrıştırma için
Yetkinlik IronXL Manuel StreamReader
Otomatik ayraç algılama Evet Hayır -- Manuel olarak yapılandırılması gerekir
Tırnaklı alan yönetimi Yerleşik Özelleştirilmiş mantık gerektirir
Tür dönüşümü (int, decimal, DateTime) Yerleşik erişiciler Parse/TryParse çağrıları gerektirir
Çok satırlı hücre değerleri Otomatik olarak ele alınır Doğru uygulamak zor
BOM işleme Otomatik StreamReader konfigürasyonu gerektiriyor
Excel formatı desteği (XLSX, XLS) Aynı API Ayrı bir kütüphane gerektirir
CSV'ye dışa aktarma SaveAsCsv metodu Ayrı bir yazma mantığı gerektirir

Çapraz Biçim Tutarlılığı

IronXL'nin pratik avantajlarından biri, aynı WorkBook.Load ve çalışma sayfası yineleme modelinin XLSX, XLS, ODS ve CSV dosyaları için çalışmasıdır. Uygulamanızın kullanıcıdan birden fazla tablo biçimi alması gerekiyorsa, ayrıştırma mantığını değiştirmeden biçimler arasında geçiş yapabilirsiniz. Dosya akışını WorkBook.Load ile iletin ve IronXL, dosya imzasına göre formatı otomatik olarak algılar.

Bu çapraz formatlı API, CSV ve Excel için ayrı uygulamalar sürdürmek yerine tek bir kod yolu yazmanızı ve test etmenizi sağlar. Desteklenen formatların tam listesi için IronXL desteklenen dosya formatları sayfasına bakın.

Büyük Dosyalar için Performans Dikkatleri

100 MB'nin altındaki CSV dosyaları için, IronXL herhangi bir ayarlama yapmadan iyi performans gösterir. Daha büyük dosyalar için şu stratejileri göz önünde bulundurun:

  • Bellek tahsisini azaltmak için dosyayı bir yoldan yükleyin yerine MemoryStream kopyalamaktan kaçının.
  • İlk yerleştirmeden önce tüm kayıtları toplamak yerine bir veritabanına eklerken satırları gruplar halinde işleyin.
  • Başlık satırını Product nesnesi olarak somutlaştırmamak için ws.Rows.Skip(1)'i LINQ ile kullanın.

Yüksek hacimli ithalat senaryoları için ek optimizasyonlar, paralel işleme ve akış modları dahil olmak üzere IronXL performans rehberini kapsar.

Sıradaki Adımlarınız Neler?

Artık her aşamasında çalışan bir CSV ithalat deseni var: kütüphaneyi yüklemek, diskten ya da yüklenen akışlardan dosyaları yüklemek, satırları tiplendirilmiş model nesnelerine eşlemek, kayıtları Entity Framework Core ile bir veritabanına kalıcı hale getirmek ve gerektiğinde verileri CSV'ye geri ihraç etmek, ASP.NET Core'ta.

Bu temeli geliştirmek için bu kaynakları keşfedin:

Projede IronXL ile, CSV'nin yanında XLSX yüklemeleri için destek eklemek, başka kod değişiklikleri gerektirmez -- aynı WorkBook.Load çağrısı her ikisini de işler. Bu tutarlılık, uygulama gereksinimleriniz arttıkça alım uç noktanızın özellik setini adım adım genişletebileceğiniz anlamına gelir.

Sıkça Sorulan Sorular

Bir ASP.NET Core uygulamasına CSV dosyalarını nasıl içe aktarabilirim?

CSV dosyalarını bir ASP.NET Core uygulamasına, dosya yüklemelerini yöneterek, CSV verilerini ayrıştırarak ve onları model sınıfı nesnelerine eşleyerek içe aktarabilirsiniz. IronXL, bu görevleri verimli bir şekilde kolaylaştıran bir API sunar.

C#'da CSV içe aktarmak için IronXL kullanmanın faydaları nelerdir?

IronXL, CSV dosyalarını içe aktarma sürecini basitleştiren bir API sunar. Verileri kolayca ayrıştırmanızı, modelle eşleştirmenizi ve kayıtları JSON'a dönüştürmenizi sağlar, bu da veri odaklı uygulamalar için ideal bir seçimdir.

IronXL CSV verilerini model sınıfı nesnelerine ayrıştırabilir mi?

Evet, IronXL CSV verilerini model sınıfı nesnelerine ayrıştırabilir ve yapılandırılmış verilerle .NET uygulamanızda verimli bir şekilde çalışmanıza olanak tanır.

CSV dosyalarını içe aktarırken IronXL, veritabanı entegrasyonuna nasıl yardımcı olur?

IronXL, CSV verilerini ayrıştırarak ve bunları kolayca veritabanınıza eklenip güncellenebilecek model nesnelerine eşleyerek veritabanı entegrasyonuna yardımcı olur.

IronXL ile CSV kayıtlarını JSON olarak döndürebilir miyim?

Evet, IronXL ile CSV kayıtlarını JSON formatına dönüştürebilir ve bu, web API'leri oluşturmak veya ön uç uygulamalarla entegrasyon için kullanışlıdır.

IronXL, CSV dışında hangi dosya formatlarını işleyebilir?

CSV'nin yanı sıra, IronXL XLSX, XLS ve diğerleri gibi çeşitli Excel dosya formatlarını işleyebilir, farklı hesap tablosu ihtiyaçları için esneklik sağlar.

IronXL büyük CSV dosya içe aktarmalarını destekliyor mu?

IronXL, veri odaklı uygulamalarda performansı ve güvenilirliği sağlamak için büyük CSV dosya içe aktarmalarını verimli bir şekilde işlemek üzere tasarlanmıştı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