IRONSOFTWAREHOME
IRONXL KULLANARAK

C# için Excel DataTable'ı Dışa Aktarma | Excel Verilerini Dönüştürme

Curtis Chau
Curtis Chau
Updated: 28 Haziran 2026

Excel verilerini DataTable'ya dışa aktarmak, veritabanları, kullanıcı arabirimi kontrolleri ve LINQ sorguları ile doğal bir şekilde çalışan yapılandırılmış, bellekte erişim sağlar. Ters yön -- bir DataTable'u Excel dosyasına geri yazmak -- rapor oluşturma ve veri depolama iş akışları için aynı derecede önemlidir. IronXL, yalnızca .NET'te, Microsoft Office bağımlılığı ve hiçbir COM ortak yönemi kurulumu olmadan her iki yönüde ele alır.

Aşağıdaki örnekleri çalıştırmadan önce IronXL'ı kurun:

PM > Install-Package IronXL.Excel

Yüklendikten sonra, WorkBook ve WorkSheet türleri, doğrudan System.Data yapılarına eşleyen ToDataTable ve ToDataSet yöntemlerini ortaya çıkarır. Ayrıca işlemi tersine çevirerek DataRow değerlerini bir çalışma sayfasına geri yazabilir ve dosyayı XLSX veya XLS formatında kaydedebilirsiniz.

Tüm Çalışma Sayfasını Nasıl Bir DataTable'a Dönüştürürsünüz?

ToDataTable yöntemi, tüm bir çalışma sayfasını -- veya adlandırılmış bir aralığı -- bir System.Data.DataTable'ya dönüştürür. İlk satırı sütun başlıkları olarak almak için true iletin, böylece ortaya çıkan tablonun sütun adları elektronik tablo başlıklarınızla tam olarak eşleşir.

using IronXL;
using System.Data;

// Load the workbook from disk
WorkBook workbook = WorkBook.Load("customers.xlsx");

// Grab the default (first) worksheet
WorkSheet worksheet = workbook.DefaultWorkSheet;

// Convert the entire sheet; first row becomes column headers
DataTable dataTable = worksheet.ToDataTable(true);

// Iterate every row and print each cell value
foreach (DataRow row in dataTable.Rows)
{
    for (int i = 0; i < dataTable.Columns.Count; i++)
    {
        Console.Write(row[i] + "\t");
    }
    Console.WriteLine();
}

Kodun Ne Yaptığını

WorkBook.Load, herhangi bir Office otomasyonu olmadan XLSX dosyasını okur. worksheet.ToDataTable(true), sayfadaki her hücreyi yineler ve bunu bir DataRow'ye eşler, ilk satırı DataColumn adları olarak kullanır. Ortaya çıkan DataTable, standart bir System.Data nesnesidir -- bir DataGridView'ye bağlayabilir, bir SqlBulkCopy'ye gönderebilir veya hemen LINQ sorguları çalıştırabilirsiniz.

ToDataTable çağrısı hem XLS hem de XLSX formatlarını destekler, bu nedenle aynı kod eski elektronik tablolar için değişiklik yapmadan çalışır. IronXL DataTable ve DataSet belgelerine bakın, tam API referansı için.

Belirli Bir Hücre Aralığını Nasıl DataTable'a Aktarırsınız?

Bir çalışma sayfası birden fazla veri bölgesine sahipse veya yalnızca bir dizi satır ve sütuna ihtiyacınız varsa, tam sayfa yerine belirli bir hücre aralığını dışa aktarabilirsiniz. Bu yaklaşım, IronXL'in yalnızca seçilen hücreleri işlemesinden dolayı büyük dosyalar için daha etkilidir.

using IronXL;
using System.Data;

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

// Access a named worksheet
WorkSheet worksheet = workbook.GetWorkSheet("Summary");

// Select only the region A1:D20 and convert it
DataTable dt = worksheet["A1:D20"].ToDataTable(true);

Console.WriteLine($"Rows: {dt.Rows.Count}, Columns: {dt.Columns.Count}");

foreach (DataRow row in dt.Rows)
{
    foreach (var item in row.ItemArray)
    {
        Console.Write(item + "\t");
    }
    Console.WriteLine();
}

Neden Aralık Seçimi Önemlidir

Parantez notasyonu worksheet["A1:D20"], bir IronXL.Range nesnesi döndürür. Bu aralıktaki ToDataTable çağrısı, işlemi tam olarak bu hücrelerle sınırlar, bu da daha hızlı yürütme ve kaynak dosyanın on binlerce satır içerdiğinde daha küçük bir bellek ayak izi anlamına gelir.

Ayrıca adlandırılmış aralıkları belirtebilir veya aralık dizgisini çalıştırma zamanında dinamik olarak oluşturabilirsiniz - örneğin, $"A1:D{lastRow}" - bu da yaklaşımı değişken uzunluklu veri dışa aktarımlarına esnek hale getirir. Aralık sınıfı API referansı, tüm mevcut seçim ve sorgulama yöntemlerini belgeler.

Çok Sayfalı Bir Çalışma Kitabı Nasıl DataSet'e Dönüştürülür?

Birden çok sayfaya sahip çalışma kitapları, doğal olarak System.Data.DataSet'ya eşlenir, burada her sayfa ayrı bir DataTable olur. ToDataSet yöntemi, bu dönüşümü tek bir çağrıda gerçekleştirir.

using IronXL;
using System.Data;

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

// Each worksheet becomes a DataTable inside the DataSet
DataSet dataSet = workbook.ToDataSet();

foreach (DataTable table in dataSet.Tables)
{
    Console.WriteLine($"Sheet: {table.TableName}");
    Console.WriteLine($"Rows:  {table.Rows.Count}");
    Console.WriteLine();
}

Sayfaya Ada Göre Erişim

Dönen DataSet'daki her DataTable orijinal çalışma sayfası adını TableName özelliği olarak kullanır, böylece koleksiyonu dolaşmak yerine dataSet.Tables["Summary"] ile belirli bir sayfayı alabilirsiniz. Bu, çok sayfalı raporlama mantığı oluşturmayı veya veritabanına sonuçları yazmadan önce birkaç çalışma sayfasından veri birleştirmeyi kolaylaştırır.

Çok sayfalı çalışma sayfaları ile çalışmanın ve çalışma kitabı yapısını yönetmenin daha fazla yolunu görmek için Excel çalışma sayfalarını nasıl açıp yöneteceğinize bakın.

Bir DataTable'yi Excel Dosyasına Nasıl Geri Aktarırsınız?

DataTable'e aktarma yönü hikayenin sadece yarısıdır. Yapılandırılmış verileri bir elektronik tablo olarak geri yazmanız gerektiğinde -- raporlar, indirmeler veya arşivleme için -- yeni bir çalışma kitabı oluşturur, DataTable'dan hücreleri doldurur ve kaydedersiniz.

using IronXL;
using System.Data;

// Build a sample DataTable
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ProductID", typeof(int)));
dt.Columns.Add(new DataColumn("ProductName", typeof(string)));
dt.Columns.Add(new DataColumn("UnitPrice", typeof(decimal)));
dt.Rows.Add(1, "Widget Pro", 29.99m);
dt.Rows.Add(2, "Gadget Max", 49.99m);
dt.Rows.Add(3, "Sensor Kit", 14.50m);

// Create a new workbook and worksheet
WorkBook workbook = WorkBook.Create();
WorkSheet worksheet = workbook.CreateWorkSheet("Products");

// Write column headers from DataTable.Columns
for (int col = 0; col < dt.Columns.Count; col++)
{
    worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}

// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
    for (int col = 0; col < dt.Columns.Count; col++)
    {
        worksheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
    }
}

// Save as XLSX
workbook.SaveAs("products_export.xlsx");
Console.WriteLine("Export complete.");

Hücre Yazma Döngüsü Nasıl Çalışır

SetCellValue(rowIndex, columnIndex, value), object değerlerini kabul eder, böylece başlık satırı için sütun adlarını ve veri satırları için ham hücre değerlerini tür dönüştürmesi olmadan iletirsiniz. row + 1 satır kaydırması, satır 0'ı başlıklar için ayırır. Ortaya çıkan XLSX dosyası tamamen geçerli bir elektronik tablodur -- yer tutucu yok, geçici dosya yok.

Daha büyük DataTable'ler için, manuel biçimlendirme olmadan içerik görünür hale gelmesi için verileri yazdıktan sonra sütun otomatik boyutlandırma uygulamayı düşünün.

DataTable'i DataGridView'e Nasıl Bağlarsınız?

Bir Excel sayfasını DataTable'ya dışa aktarmanın en yaygın nedenlerinden biri, bir Windows Forms DataGridView'da görüntülemektir. Bir DataTable'a sahip olduğunuzda, bağlama tek bir kod satırıdır.

using IronXL;
using System.Data;
using System.Windows.Forms;

WorkBook workbook = WorkBook.Load("inventory.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;
DataTable dataTable = worksheet.ToDataTable(true);

// Bind directly to a DataGridView
dataGridViewInventory.DataSource = dataTable;

Bağlantı Zamanında Ne Olur

DataSource ayarlanması, DataGridView'un sütun adlarını ve satır verilerini DataTable'den okumasını tetikler. Her DataColumn bir ızgara sütunu olur ve her DataRow görünür bir satır olur. Ek kod olmadan ızgaranın yerleşik kontrolleri aracılığıyla sıralama, filtreleme ve seçim davranışları uygulayabilirsiniz.

Bu model, WPF DataGrid, ASP.NET GridView ve diğer tüm .NET veri bağlama altyapısı ile eşit derecede iyi çalışır. Adım adım bir kılavuz için, ters yön için DataGridView'den Excel'e nasıl dışa aktarılacağına bakın.

İhraç Edilmiş Bir DataTable Üzerinde LINQ Sorguları Nasıl Kullanılır?

Bir çalışma sayfasını DataTable'ye dönüştürdükten sonra, AsEnumerable() genişletme yöntemini kullanarak LINQ sorguları çalıştırabilir, her DataRow'yı sorgulanabilir bir elemana dönüştürür.

using IronXL;
using System.Data;
using System.Linq;

WorkBook workbook = WorkBook.Load("sales.xlsx");
DataTable dt = workbook.DefaultWorkSheet.ToDataTable(true);

// Filter rows where the "Revenue" column exceeds 10000
var highRevenue = dt.AsEnumerable()
    .Where(row => row.Field<double>("Revenue") > 10000)
    .OrderByDescending(row => row.Field<double>("Revenue"))
    .ToList();

Console.WriteLine($"High-revenue records: {highRevenue.Count}");
foreach (var row in highRevenue)
{
    Console.WriteLine($"{row["Product"]}: {row["Revenue"]:C}");
}

DataTable Üzerinde LINQ Neden Faydalıdır

LINQ sorguları, dönüştürülmüş bir çalışma sayfasından verileri filtrelemek, sıralamak, gruplamak ve projelendirmek için okunabilir, güçlü tipli bir yol sunar. row.Field<t>(columnName), tür zorlamasını düzgün bir şekilde ele alır, bir değer dönüştürülemezse sessiz bir null döndürmek yerine bir InvalidCastException atar. Bu, veri kalitesi sorunlarını erken yakalamayı kolaylaştırır.

Bu yaklaşımı, büyük dosyalar için bellek kullanımını düşük tutarak, tam çalışma sayfaları yerine belirli sayfa bölgelerini sorgulamak için önceki bölümdeki aralık tabanlı dışa aktarma ile birleştirin.

İhracat Sırasında Boş ve Boş Hücreleri Nasıl Ele Alırsınız?

Excel elektronik tabloları genellikle boşluklara sahiptir -- boş hücreler, birleştirilmiş bölgeler veya yer tutucu metin. IronXL, boş hücreleri DBNull.Value ile dışa aktarılan DataTable'da eşleştirir, böylece mevcut null işleme kodunuz herhangi bir değişiklik yapmadan çalışır.

IronXL nasıl Excel hücre durumlarını DataTable değerleri ile eşler
Excel hücre durumuDataTable değeriAçıklamalar
Metin değeriDizeOlduğu gibi döndürülür
Sayısal değerÇift veya OndalıkHücre formatına bağlıdır
Tarih değeriDateTimeSeri numaradan ayrıştırılır
Mantıksal değerBooleanExcel'de DOĞRU/YANLIŞ
Boş hücreDBNull.ValueStandart ADO.NET null
Formül hücresiHesaplanmış sonuçIronXL önce formülü değerlendirir

Bir DataTable'yı Excel'e geri yazarken, DBNull.Value alanları boş hücreler üretir, yuvarlak gidiş-dönüş sadakatini korur. Null alanları için varsayılan bir dizeye ihtiyacınız varsa, SetCellValue çağrısından önce DBNull.Value'yi yerleştirin.

Daha fazla veri hazırlama rehberliği için, Microsoft'un DataTable sınıf belgeleri null işleme, kısıtlama yönetimi ve satır durumlarını derinlemesine kapsar.

Büyük Çalışma Sayfalarını Dışa Aktarırken Nasıl Bellek Tasarrufu Yapabilirsiniz?

Binlerce satırlık çalışma sayfaları için, tüm sayfayı tek seferde dışa aktarmak tüm veriyi aynı anda bellekte tahsis eder. İki IronXL modeli, maksimum bellek kullanımını azaltır:

  • Aralık dışa aktarma: Tam sayfa yerine sınırlandırılmış bir bölgeyi işlemek için worksheet["A1:D5000"].ToDataTable(true) kullanın.
  • Toplu işleme: Son kullanılan satırı worksheet.RowCount ile hesaplayın, ardından sabit boyutlu aralıklar üzerinde döngü yapın - örneğin, her seferinde 1.000 satır - ve bir sonraki gruba geçmeden önce her grubu işleyin.

worksheet.RowCount ve worksheet.ColumnCount özellikleri, boyutları sert kodlamadan dinamik aralık dizgileri oluşturmanıza olanak tanır:

using IronXL;
using System.Data;

WorkBook workbook = WorkBook.Load("large_dataset.xlsx");
WorkSheet worksheet = workbook.DefaultWorkSheet;

int batchSize = 1000;
int totalRows = worksheet.RowCount;

for (int startRow = 1; startRow <= totalRows; startRow += batchSize)
{
    int endRow = Math.Min(startRow + batchSize - 1, totalRows);
    string rangeAddress = $"A{startRow}:Z{endRow}";

    DataTable batch = worksheet[rangeAddress].ToDataTable(false);
    // Process each batch -- write to database, transform, etc.
    Console.WriteLine($"Processed rows {startRow} to {endRow}");
}

Bu model, bellek kısıtlamalarının geçerli olduğu C# içinde büyük Excel dosyalarını okurken özellikle önemlidir.

DataTable'yi Veritabanına Nasıl Yazarsınız?

Bir DataTable'ya sahip olduğunuzda, SqlBulkCopy aracılığıyla SQL Server'a eklemek, büyük veri kümeleri için en hızlı yoldur. SqlBulkCopy, bir DataTable'yi doğrudan kabul eder ve bireysel INSERT ifadeleri oluşturmadan satırları toplu halde aktarır.

using IronXL;
using System.Data;
using Microsoft.Data.SqlClient;

WorkBook workbook = WorkBook.Load("orders.xlsx");
DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);

string connectionDize = "Server=.;Database=OrdersDB;Trusted_Connection=True;";

using SqlConnection connection = new(connectionDize);
connection.Open();

using SqlBulkCopy bulkCopy = new(connection);
bulkCopy.DestinationTableName = "dbo.Orders";
bulkCopy.BatchSize = 500;
bulkCopy.BulkCopyTimeout = 60;

// Map DataTable columns to database columns
bulkCopy.ColumnMappings.Add("OrderID", "OrderID");
bulkCopy.ColumnMappings.Add("CustomerName", "CustomerName");
bulkCopy.ColumnMappings.Add("TotalAmount", "TotalAmount");

bulkCopy.WriteToServer(dataTable);
Console.WriteLine("Bulk insert complete.");
C#

Sütun Eşleştirme Düşünceleri

ColumnMappings koleksiyonu, DataTable sütun adlarını veritabanı sütun adlarına eşler. Eğer her iki isim de aynı ise, bireysel eşlemeleri atlayabilir ve SqlBulkCopy otomatik olarak isimle eşleştirir. Bu, elektronik tablo sütun sırası veritabanı şemasından farklı olduğunda daha güvenlidir.

IronXL'i veritabanı iş akışlarıyla birleştirmenin daha fazlası için, C# Excel import rehberi C# Excel import rehberi, ek import senaryolarını, doğrulama öncesi eklerken kapsar.

Entity Framework tabanlı projeler için, DataTable satırlarını önce tipli model nesnelerine dönüştürün, ardından bir EFCore.BulkExtensions gibi bir kütüphaneden DbContext.BulkInsert kullanarak ORM farkında toplu ekleme yapın. Microsoft'un SqlBulkCopy belgeleri, batching seçeneklerini ve işlem desteklerini ayrıntılı şekilde açıklar.

Sonraki Adımlarınız Neler?

Artık IronXL kullanarak her iki yönde de Excel ve DataTable arasında veri taşımak için eksiksiz bir araç setiniz var:

  • Başlık farkında dışa aktarımlar için worksheet.ToDataTable(true) ile tam bir çalışma sayfasını dönüştürün
  • Belirli bir hücre aralığını worksheet["A1:D20"].ToDataTable(true) düzeni ile dışa aktarın
  • Tam DataSet erişimi için workbook.ToDataSet() ile çok sayfalı çalışma kitaplarını dönüştürün
  • DataRow değerlerini SetCellValue ile yineleyerek DataTable içeriğini XLSX'e geri yazın
  • DataTable'yi, tek bir DataSource ataması ile DataGridView gibi kullanıcı arayüzü kontrollerine bağlayın
  • Yüksek geçiş hızına sahip veritabanı ekleri için DataTable'dan doğrudan SqlBulkCopy besleyin

IronXL becerilerinizi geliştirene kadar, ilgili konulara göz atın:

ücretsiz IronXL deneme lisansı ile kendi projelerinizde bu örnekleri çalıştırmaya başlayın. Dağıtıma hazır olduğunuzda, üretim lisansı satın alın veya lisanslama rehberliği için takımla sohbet edin.

İlk Adım:
arrow pointer
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