
C# Kullanarak StreamReader ile Excel Dosyasını Okuma Alternatifi - IronXL
Pek çok C# geliştiricisi, Excel sayfası dosyalarını okumaya çalışırken ortak bir zorlukla karşılaşır: metin dosyaları için mükemmel çalışan güvenilir StreamReader, Excel belgelerinde gizemli bir şekilde başarısız oluyor. C#'da StreamReader kullanarak bir Excel dosyası okumaya çalıştıysanız ve bozuk karakterler veya istisnalar gördüyseniz, yalnız değilsiniz. Bu eğitim, StreamReader'nın Excel dosyalarını doğrudan neden işleyemediğini açıklar ve Excel Interop kullanmadan IronXL ile uygun çözümü gösterir.
Karışıklık genellikle Excel'in açabileceği CSV dosyalarının, StreamReader ile düzgün çalışmasından kaynaklanır. Ancak, gerçek Excel dosyaları (XLSX, XLS) temel olarak farklı bir yaklaşım gerektirir. Bu ayrımı anlamak, size hata ayıklamada saatler kazandıracak ve iş için doğru araca yönlendirecektir.

StreamReader Neden Excel Dosyalarını Okuyamaz?
StreamReader, belirtilen bir kodlama kullanarak, karakter verilerini satır satır okuyan düz metin dosyaları için tasarlanmıştır. Excel dosyaları, tablo görünümüne rağmen aslında StreamReader tarafından yorumlanamayan karmaşık ikili veya ZIP sıkıştırılmış XML yapılarıdır.
static void Main(string[] args)
{
// This code will NOT work - demonstrates the problem
using (StreamReader reader = new StreamReader("ProductData.xlsx"))
{
string content = reader.ReadLine(); // read data
Console.WriteLine(content); // Outputs garbled binary data
}
}Option Strict On
Option Infer On
Imports System.IO
Module Program
Sub Main(args As String())
' This code will NOT work - demonstrates the problem
Using reader As New StreamReader("ProductData.xlsx")
Dim content As String = reader.ReadLine() ' read data
Console.WriteLine(content) ' Outputs garbled binary data
End Using
End Sub
End ModuleBu Sınıf Program kod parçasını çalıştırdığınızda, hesap tablosu verilerinizi görmek yerine, "PK♥♦" veya benzer sistem karakterleri gibi ikili bilinmeyen verilerle karşılaşırsınız. Bu durum, XLSX dosyalarının birden çok XML dosyası içeren ZIP arşivleri olması ve XLS dosyalarının ise patentli bir ikili format kullanması nedeniyle gerçekleşir. StreamReader düz metin bekler ve bu karmaşık yapıları karakter olarak yorumlamaya çalışarak anlamsız çıktılar üretir.
Örnek Giriş

Çıktı

Modern Excel dosyaları (XLSX) birden fazla bileşen içerir: çalışma sayfaları, stiller, paylaşılan metinler ve ilişkiler, tümü bir arada paketlenmiştir. Bu karmaşıklık, Excel dosya yapısını anlayan özel kütüphaneler gerektirir, bu da bizi IronXL'e getirir.
IronXL ile Excel Dosyaları Nasıl Okunur?
IronXL, C# dilinde Excel dosyalarını okumak için basit bir çözüm sunar. StreamReader aksine, IronXL Excel'in iç yapısını anlar ve verilerinize erişmek için sezgisel yöntemler sunar. Kütüphane Windows, Linux, macOS ve Docker konteynerlerini destekler, bu da modern, çapraz platform uygulamaları için idealdir.

Öncelikle, NuGet Paket Yöneticisi üzerinden IronXL'i yükleyin:

Bir Excel dosyasını doğru şekilde nasıl okuyacağınızı burada gösteriyoruz:
using IronXL;
// Load the Excel file
WorkBook workbook = WorkBook.Load("sample.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Read specific cell values
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");
// Read a range of cells
foreach (var cell in worksheet["A1:C5"])
{
Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}Imports IronXL
' Load the Excel file
Dim workbook As WorkBook = WorkBook.Load("sample.xlsx")
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Read specific cell values
Dim cellValue As String = worksheet("A1").StringValue
Console.WriteLine($"Cell A1 contains: {cellValue}")
' Read a range of cells
For Each cell In worksheet("A1:C5")
Console.WriteLine($"{cell.AddressString}: {cell.Text}")
NextBu kod, Excel dosyanızı başarılı bir şekilde yükler ve hücre değerlerine temiz bir erişim sağlar. WorkBook.Load yöntemi, dosya formatını (XLSX, XLS, XLSM, CSV) otomatik olarak algılar ve tüm karmaşık ayrıştırmayı dahili olarak halleder. Excel'e aşina olan herkes için kodun anlaşılmasını kolaylaştıran, "A1" veya "A1:C5" gibi yer aralıkları kullanarak hücrelere erişebilirsiniz.
Hafıza Akışlarından Excel Nasıl Okunur?
Gerçek dünya uygulamaları genellikle Excel dosyalarını disk dosyalarından ziyade akışlardan işlemelidir. Yaygın senaryolar arasında web yüklemeleriyle ilgili işlemler, veritabanlarından dosyaların alınması veya bulut depolama alanından verilerin işlenmesi yer alır. IronXL bu durumları ince bir şekilde yönetir:
using IronXL;
using System.IO;
// Read Excel from a memory stream
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");
using (MemoryStream stream = new MemoryStream(fileBytes))
{
WorkBook workbook = WorkBook.FromStream(stream);
WorkSheet worksheet = workbook.DefaultWorkSheet;
// Process the data
int rowCount = worksheet.RowCount;
Console.WriteLine($"The worksheet has {rowCount} rows");
// Read all data into a new DataTable, return dt
var dataTable = worksheet.ToDataTable(false);
// Return DataTable row count
Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");
}Imports IronXL
Imports System.IO
' Read Excel from a memory stream
Dim fileBytes As Byte() = File.ReadAllBytes("ProductData.xlsx")
Using stream As New MemoryStream(fileBytes)
Dim workbook As WorkBook = WorkBook.FromStream(stream)
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Process the data
Dim rowCount As Integer = worksheet.RowCount
Console.WriteLine($"The worksheet has {rowCount} rows")
' Read all data into a new DataTable, return dt
Dim dataTable = worksheet.ToDataTable(False)
' Return DataTable row count
Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows")
End UsingWorkBook.FromStream yöntemi, bir MemoryStream , FileStream veya ağ akışı olsun, herhangi bir akış türünü kabul eder. Bu esneklik, Excel dosyalarını kaynaklardan geçici olarak diske kaydetmeden işlem yapmanıza olanak tanır. Örnek ayrıca, veri tabanları ve veri bağlantı senaryolarıyla sorunsuz bir şekilde bütünleşen, çalışma sayfası verilerini bir DataTable'a dönüştürmeyi de göstermektedir.
Çıktı

Verileri okumak için nesne göndericisini ne zaman kullanmalısınız?
Bu kodun olay güdümlü programlama çerçevesinde kullanıldığı durumlarda (örneğin, Windows Forms veya ASP.NET'te bir dosya yükleme butonunu yönetmek için), yöntem imzası genellikle object sender ve EventArgs e gibi parametreler içerir. Bu bağlam, Excel işleme mantığının UI veya servis olaylarıyla doğru şekilde bağlanmasını sağlar.

Excel ve CSV Arasında Nasıl Dönüştürme Yapılır?
StreamReader CSV dosyalarını işlerken, genellikle Excel ve CSV formatları arasında dönüştürme yapmanız gerekir. IronXL bu dönüşümü basit hale getirir:
using IronXL;
// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("data.xlsx");
workbook.SaveAsCsv("output.csv");
// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("input.csv");
csvWorkbook.SaveAs("output.xlsx");
// Export specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("worksheet1.csv");Imports IronXL
' Load an Excel file and save as CSV
Dim workbook As WorkBook = WorkBook.Load("data.xlsx")
workbook.SaveAsCsv("output.csv")
' Load a CSV file and save as Excel
Dim csvWorkbook As WorkBook = WorkBook.LoadCSV("input.csv")
csvWorkbook.SaveAs("output.xlsx")
' Export specific worksheet to CSV
Dim worksheet As WorkSheet = workbook.WorkSheets(0)
worksheet.SaveAsCsv("worksheet1.csv")Bu dönüşümler, dosya formatını değiştirirken verilerinizi korur. Excel'i CSV'ye dönüştürdüğünüzde, IronXL varsayılan olarak ilk çalışma sayfasını düzleştirir, ancak dışa aktarılacak çalışma sayfasını belirtebilirsiniz. CSV'den Excel'e dönüşüm, verilerinizi koruyan ve gelecekte biçimlendirme ve formül eklemeye olanak tanıyan doğru bir şekilde biçimlendirilmiş bir çalışma sayfası oluşturur.
Sonuç
StreamReader'nın Excel dosyalarını işleyememesi, düz metin ve Excel'in karmaşık dosya yapısı arasındaki temel farktan kaynaklanır. StreamReader, CSV ve diğer metin formatları için mükemmel çalışırken, gerçek Excel dosyaları, içindeki ikili ve XML yapıları anlayan IronXL gibi özel bir kütüphane gerektirir.
IronXL, sezgisel API'si, kapsamlı format desteği ve sorunsuz akış işleme yetenekleriyle şık bir çözüm sunar. İster web uygulamaları, ister masaüstü yazılımı veya bulut hizmetleri inşa edin, IronXL tüm platformlarda Excel dosyalarını güvenilir bir şekilde işler.
Excel dosyaları ile düzgün bir şekilde çalışmaya hazır mısınız? IronXL'in ücretsiz denemesini indirin ve C# uygulamalarınızda sorunsuz Excel işleme deneyimini yaşayın. Prodüksiyon dağıtımları için, projenizin ihtiyaçlarına en uygun IronXL lisans seçeneklerini değerlendirin.

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.
İlgili Makaleler



