IRONSOFTWAREHOME
IRONXL KULLANARAK

StreamReader Kullanmak Yerine C# ile Excel Dosyalarını Nasıl Okunur

Curtis Chau
Curtis Chau
Updated: 28 Haziran 2026

Birçok C# geliştiricisi, Excel dosyalarıyla çalışırken sinir bozucu bir zorlukla karşılaşır: Metin dosyalarını güvenilir bir şekilde işleyen StreamReader sınıfı, bir Excel belgesine işaret edildiğinde tamamen başarısız olur. C# içinde bir Excel dosyasını StreamReader kullanarak okumayı denediyseniz ve karşılığında karışık karakterler, ikili gürültü veya beklenmedik istisnalar gördüyseniz, yalnız değilsiniz. Bu kılavuz, StreamReader Excel dosyalarını neden işleyemediğini ve sorunu nasıl doğru bir şekilde çözebileceğinizi açıklar - herhangi bir Excel kurulumu gerektirmeyen, .NET için özel olarak tasarlanmış bir Excel kütüphanesi olan IronXL kullanarak.

Karışıklık genellikle, Excel'in açıp kaydedebildiği CSV dosyalarının, StreamReader ile gayet iyi çalışması nedeniyle ortaya çıkar. Gerçek Excel dosyaları (XLSX, XLS, XLSM) temelde farklı bir yaklaşım gerektirir. Bu ayrımı anlamak, saatlerce hata ayıklamadan tasarruf etmenizi ve doğru araçları seçmenizi sağlar.

 C# ile StreamReader Kullanarak Excel Dosyası Okumaya Alternatif - IronXL: Görüntü 1 - IronXL

StreamReader Neden Excel Dosyalarını Okuyamaz?

StreamReader metin tabanlı bir okuyucudur. Karakter verilerini belirtilen bir kodlama (UTF-8, ASCII, vb.) ile satır satır okur ve ikili yapılar veya sıkıştırılmış arşivlerle ilgili hiçbir farkındalığı yoktur. Resmi .NET StreamReader belgeleri, bu sınıfın yalnızca karakter kodlu metinler için tasarlandığını doğrular. Basit bir hesap tablosu gibi görünmelerine rağmen, Excel dosyaları aslında StreamReader tarafından yorumlanamayan karmaşık ikili veya ZIP sıkıştırılmış XML yapılarıdır.

Bir XLSX dosyasını StreamReader ile açtığınızda, bir ZIP arşivini düz metin olarak okumaya çalışıyorsunuz. Sonuç, hesap tablo verileriniz yerine bir dizi ikili gürültüdür.

// This code will NOT work -- demonstrates the problem
using StreamReader reader = new StreamReader("ProductData.xlsx");
string content = reader.ReadLine();
Console.WriteLine(content); // Outputs garbled binary data like "PK♥♦"

Bu kod parçasını çalıştırdığınızda, hesap tablosu satırlarınızı görmek yerine, PK♥♦ gibi ikili karakterler veya benzer gürültüyle karşılaşırsınız. Bu, çünkü:

  • XLSX dosyaları birçok XML dosyası içeren ZIP arşivleridir: çalışma sayfaları, stiller, paylaşılan stringler, ilişkiler. Open XML SDK belgeleri bu yapının ayrıntılı bir dökümünü sağlar.
  • XLS dosyaları özel bir ikili format kullanır (BIFF -- Binary Interchange Dosya Formatı)
  • StreamReader okuduğu baytlara bir karakter kodlaması uygular ve her iki format için anlamsız çıktılar üretir

Örnek Giriş

 C# ile StreamReader Kullanarak Excel Dosyası Okumaya Alternatif - IronXL: Görüntü 2 - Excel Girişi

StreamReader Kullanıldığında Karmaşık Çıktı

 C# ile StreamReader Kullanarak Excel Dosyası Okumaya Alternatif - IronXL: Görüntü 3 - Konsol Çıktısı

CSV Neden Çalışıyor Ama XLSX Çalışmıyor?

CSV (Virgülle Ayrılmış Değerler) düz metin formatıdır. Her satır bir metin satırıdır ve her sütun virgülle ayrılır. StreamReader, ikili veri veya sıkıştırılmış arşiv içermediklerinden CSV dosyalarını sorunsuz okur. XLSX temelde farklıdır: bir ZIP konteyneri içinde çok sayıda XML belgeyi, meta verileri, temaları ve stil tanımlarını paketler. Basit bir satır satır okuma imkanı yoktur.

Araçlarınızı seçerken bu ayrım önemlidir. CSV dosyaları için, StreamReader veya File.ReadAllLines mükemmel bir şekilde yeterlidir. Gerçek Excel çalışma kitapları için, formatı yapısal düzeyde anlayan bir kütüphaneye ihtiyacınız vardır.

.NET Projesine IronXL Nasıl Kurulur?

IronXL, Microsoft Excel'in yüklü olması gerekmeden Excel dosyalarını okuyup yazan ve oluşturan bir .NET kütüphanesidir. XLSX, XLS, XLSM, CSV ve TSV formatlarını destekler ve Windows, Linux, macOS ve Docker konteynerlerinde çalışır.

IronXL'i kurmak için ya NuGet Paket Yöneticisi Konsolunu ya da .NET CLI kullanın. Paket, NuGet.org'da IronXL olarak yayınlanmıştır:

PM > Install-Package IronXL.Excel

Kurulumdan sonra, dosyanıza using IronXL; yönergesini ekleyin ve Excel belgeleriyle çalışmaya hazırsınız.

 C# ile StreamReader Kullanarak Excel Dosyası Okumaya Alternatif - IronXL: Görüntü 5 - Kurulum

Ayrıntılı kurulum adımları ve NuGet yapılandırma seçenekleri için IronXL NuGet kurulum kılavuzuna bakın. Bir ücretsiz deneme lisansı mevcuttur, böylece satın almadan önce projelerinizde IronXL'i değerlendirebilirsiniz.

 C# ile StreamReader Kullanarak Excel Dosyası Okumaya Alternatif - IronXL: Görüntü 4 - Çapraz Platform

IronXL ile Excel Dosyaları Nasıl Okunur?

IronXL, C#'da Excel dosyalarını okumak için sezgisel bir API sağlar. StreamReader'nun aksine, IronXL Excel'in iç yapısını anlar ve size satırlara, sütunlara ve hücre değerlerine temiz erişim sağlar. IronXL belgeleri, desteklenen tüm işlemler için tam API referansları sağlar.

Bir Excel dosyasını okuyun için üst düzey bildirimlerle IronXL kullanarak nasıl yapılacağını burada gösteriyoruz:

using IronXL;

// Load the Excel file from disk
WorkBook workbook = WorkBook.Load("ProductData.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Read a specific cell by address
string cellValue = worksheet["A1"].StringValue;
Console.WriteLine($"Cell A1 contains: {cellValue}");

// Iterate over a range of cells
foreach (var cell in worksheet["A1:C10"])
{
    Console.WriteLine($"{cell.AddressString}: {cell.Text}");
}

// Read a numeric value
decimal price = worksheet["B2"].DecimalValue;
Console.WriteLine($"Price: {price:C}");

WorkBook.Load metodu, dosya formatını otomatik olarak algılar (XLSX, XLS, XLSM, CSV) ve tüm karmaşık ayrıştırmayı halleder. Hücrelere, "A1" veya "A1:C10" gibi aralıklar gibi standart Excel notasyonunu kullanarak erişirsiniz, bu da kodun hesap tablosuyla aşina olan herhangi biri tarafından hemen okunabilir olmasını sağlar.

Birden Çok Çalışma Sayfasına Erişim

Birçok çalışma kitabı birden fazla sayfa içerir. IronXL size çalışma kitaplarını açma ve gezinme ile tam çalışma tablosu numaralandırması sunar:

using IronXL;

WorkBook workbook = WorkBook.Load("MultiSheet.xlsx");

// List all worksheets
foreach (WorkSheet sheet in workbook.WorkSheets)
{
    Console.WriteLine($"Sheet: {sheet.Name}, Rows: {sheet.RowCount}");
}

// Access a sheet by name
WorkSheet summary = workbook.GetWorkSheet("Summary");
string totalRevenue = summary["B20"].StringValue;
Console.WriteLine($"Total Revenue: {totalRevenue}");

// Access a sheet by index
WorkSheet firstSheet = workbook.WorkSheets[0];
int lastRow = firstSheet.RowCount;
Console.WriteLine($"Last row in first sheet: {lastRow}");

Bu yaklaşım, Excel'ı StreamReader veya dize manipülasyonu ile ayrıştırmaya yönelik herhangi bir girişimden çok daha temizdir.

Excel Verileri Bir Bellek Akışından 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 formlarından dosya yükleme işlemleri, bir veritabanı BLOB sütunundan çalışma kitaplarının alınması veya bulut depolamadan (Azure Blob Storage, AWS S3) indirilen dosyaların işlenmesi bulunur. IronXL bu senaryoları WorkBook.FromStream ile ele alır:

using IronXL;
using System.IO;

// Simulate reading file bytes (e.g., from a database or web upload)
byte[] fileBytes = File.ReadAllBytes("ProductData.xlsx");

using MemoryStream stream = new MemoryStream(fileBytes);
WorkBook workbook = WorkBook.FromStream(stream);
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Get row and column counts
Console.WriteLine($"Rows: {worksheet.RowCount}, Columns: {worksheet.ColumnCount}");

// Convert to DataTable for database or grid binding
var dataTable = worksheet.ToDataTable(useHeaderRow: true);
Console.WriteLine($"Loaded {dataTable.Rows.Count} data rows");

foreach (System.Data.DataRow row in dataTable.Rows)
{
    string productName = row["ProductName"]?.ToString() ?? string.Empty;
    string sku = row["SKU"]?.ToString() ?? string.Empty;
    Console.WriteLine($"Product: {productName}, SKU: {sku}");
}

WorkBook.FromStream, herhangi bir Stream - MemoryStream, FileStream veya bir ağ akışını kabul eder. Bu esneklik, Excel verilerini okumak için geçici dosyaları diske yazmayı asla zorunlu kılmaz. DataTable'a dönüşüm SqlBulkCopy, veri bağlama kontrolleri ve raporlama çerçeveleri ile doğrudan bütünleşir.

Akış İşleme Çıkışı

 C# ile StreamReader Kullanarak Excel Dosyası Okumaya Alternatif - IronXL: Görüntü 6 - MemoryStream Çıktısından Excel Okuma

Olay Odaklı Excel Okuma Ne Zaman Kullanılır?

Olay güdümlü mimarilerde - örneğin, Windows Forms'ta bir dosya yükleme düğmesi veya bir ASP.NET denetleyici eylemi - yöntem imzası genellikle object sender ve EventArgs e parametrelerini içerir. Excel işleme mantığı hala aynı IronXL API'yi kullanır, ancak üst düzey bir bildirim yerine olay yürütücü içinden çağrılır. IronXL, herhangi bir olay odaklı ya da asenkron iş akışına temiz bir şekilde entegre edilir, çünkü bir UI iş parçacığına bağımlı değildir.

 C# ile StreamReader Kullanarak Excel Dosyası Okumaya Alternatif - IronXL: Görüntü 7 - Özellikler

Excel ve CSV Formatları Arasında Nasıl Dönüştürülür?

StreamReader CSV dosyalarını işleyebilirken, üretim uygulamalarının genellikle Excel ve CSV arasında veri taşımaları gerekir. IronXL format dönüşümünü kolaylaştırır. Excel verilerini CSV olarak dışa aktarabilir veya verilerinizi CSV verilerini çok az satırda bir çalışma kitabına aktarabilirsiniz:

using IronXL;

// Load an Excel file and save as CSV
WorkBook workbook = WorkBook.Load("SalesData.xlsx");
workbook.SaveAsCsv("output.csv");

// Load a CSV file and save as Excel
WorkBook csvWorkbook = WorkBook.LoadCSV("legacy-report.csv");
csvWorkbook.SaveAs("converted.xlsx");

// Export a specific worksheet to CSV
WorkSheet worksheet = workbook.WorkSheets[0];
worksheet.SaveAsCsv("sheet1-export.csv");

Bu dönüşümler verilerinizi korurken konteyner formatını değiştirir. Excel'i CSV'ye dönüştürürken, IronXL varsayılan olarak ilk çalışma sayfasını dışa aktarır; istediğiniz herhangi bir sayfayı belirtebilirsiniz. CSV'yi Excel'e dönüştürmek, verilerinizi daha sonra biçimlendirebileceğiniz, formül ekleyebileceğiniz ve ek veriler yazabileceğiniz doğru bir şekilde yapılandırılmış bir çalışma kitabı oluşturur.

Format Destek Farkları Nelerdir?

Farklı dosya formatlarını okumak için StreamReader ve IronXL'in karşılaştırılması
Dosya FormatıStreamReaderIronXLAçıklamalar
CSV (.csv)EvetEvetDüz metin; StreamReader iyi çalışır
XLSX (.xlsx)HayırEvetZIP-sıkıştırılmış XML; kütüphane gerektirir
XLS (.xls)HayırEvetİkili BIFF formatı; kütüphane gerektirir
XLSM (.xlsm)HayırEvetMakro özellikli çalışma kitabı
TSV (.tsv)EvetEvetSekmeyle ayrılmış düz metin

IronXL ile Excel Dosyaları Nasıl Oluşturulur ve Biçimlendirilir?

Excel verilerini okumak iş akışının yalnızca bir parçasıdır. Birçok uygulama ayrıca yeni Excel dosyaları oluşturmayı ve biçimlendirme uygulamayı gerektirir. IronXL, yazı tipleri, renkler, kenarlıklar, sayı formatları ve hücre birleştirme işlemleri de dahil olmak üzere hücre biçimlendirmelerini destekler:

using IronXL;

// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");

// Write headers with formatting
sheet["A1"].Value = "Product";
sheet["B1"].Value = "Units Sold";
sheet["C1"].Value = "Revenue";

// Apply bold formatting to header row
sheet["A1:C1"].Style.Font.Bold = true;
sheet["A1:C1"].Style.SetBackgroundColor("#4472C4");
sheet["A1:C1"].Style.Font.Color = "#FFFFFF";

// Write data rows
string[] products = { "Widget A", "Widget B", "Widget C" };
int[] units = { 120, 85, 210 };
decimal[] revenues = { 2400.00m, 1700.00m, 4200.00m };

for (int i = 0; i < products.Length; i++)
{
    sheet[$"A{i + 2}"].Value = products[i];
    sheet[$"B{i + 2}"].Value = units[i];
    sheet[$"C{i + 2}"].Value = revenues[i];
    sheet[$"C{i + 2}"].FormatString = "$#,##0.00";
}

// Save the workbook
workbook.SaveAs("FormattedReport.xlsx");
Console.WriteLine("Report created successfully.");

Bu yetenek, mevcut çalışma kitaplarını okuma ve yeni biçimlendirilmiş dosyalar oluşturma konusunda IronXL'i .NET uygulamaları için eksiksiz bir Excel çözümü yapar. Desteklenen işlemlerin ayrıntılı bir dökümünü incelemek için tam IronXL özellikleri sayfasını gözden geçirin.

Verileri Diğer Formatlara Dışa Aktarma

IronXL ayrıca çalışma kitaplarını DataSet nesneleri olarak dışa aktarmayı destekler, bu da özellikle çarpraz sayfa hesaplamaları veya veritabanına toplu ekleme işlemlerine bellek içi yükleme esnasında yararlıdır. ToDataSet yöntemi, her bir çalışma sayfasının bir DataTable olduğu bir DataSet döndürür.

IronXL Nasıl Lisanslanır ve Prodüksiyona Dağıtılır?

IronXL, geliştirme ve test için ücretsizdir. Prodüksiyon uygulamaları için bir lisans gereklidir. IronXL lisans seçeneklerini ürün sayfasında keşfedebilir, Geliştirici, Takım ve Organizasyon katmanlarını dağıtım gereksinimlerinize göre değerlendirebilirsiniz.

Satın alımdan sonra, lisans anahtarınızı kodunuzda herhangi bir IronXL çağrısından önce uygulayın:

IronXL.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";

Alternatif olarak, dağıtım ortamınızda IRONXL_LICENSE_KEY ortam değişkenini ayarlayın ve IronXL bunu otomatik olarak alacaktır. Bu, anahtarların kodlanmasının kabul edilmediği konteyner tabanlı dağıtımlar (Docker, Kubernetes) ve bulut ortamları için tercih edilen yaklaşımdır.

Değerlendirme amaçları için, belirli iş yüklerinize göre IronXL'i satın almadan önce doğrulamanıza olanak tanıyan ücretsiz bir deneme lisansı tam işlevsellik sağlar. Deneme, kredi kartı gerektirmeden kullanılabilir ve hemen etkinleşir.

Microsoft.Office.Interop.Excel gibi alternatiflerle kıyaslandığında, IronXL'in çeşitli dağıtım avantajları vardır:

  • Sunucuda Microsoft Excel'in yüklenmesi gerekmez
  • Linux ve Docker ile uyumludur -- bulut yerel uygulamalar için kritik
  • COM nesne yaşam döngüsü yönetimi veya apartment iş parçacığı sorunları yoktur
  • Sunucu bağlamlarında daha hızlı başlangıç ve daha düşük bellek kullanımı
  • Desteklenen tüm platformlarda tutarlı davranış

Bu nitelikler, IronXL'i prodüksiyonda, ister yerinde ister bulutta Excel dosyalarını işlemeye ihtiyaç duyan herhangi bir .NET uygulaması için pratik bir seçim yapar.

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