C# için Excel DataTable'ı Dışa Aktarma | Excel Verilerini Dönüştürme
Excel verilerini bir DataTable'a dışa aktarmak, veri tabanları, UI kontrolleri ve LINQ sorguları ile doğal olarak çalışan, bellekte yapılandırılmış erişim sağlar. Excel dosyasına geri yazılan bir DataTable, rapor oluşturma ve veri depolama iş akışları için aynı derecede önemlidir. IronXL her iki yönü de saf .NET içinde, Microsoft Office bağımlılığı olmadan ve COM birbirine bağımlı kurulum olmadan işler.
Aşağıdaki örneklerden herhangi birini çalıştırmadan önce IronXL'i yükleyin:
Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
Kurulduktan sonra, WorkBook ve WorkSheet türleri, System.Data yapıları ile doğrudan eşleşen ToDataTable ve ToDataSet yöntemlerini açığa çı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.
Bir Çalışma Sayfasının Tamamını DataTable'a Nasıl Dönüştürürsünüz?
ToDataTable yöntemi, bir çalışma sayfasının tamamını veya adlandırılmış bir aralığı System.Data.DataTable'a dönüştürür. Sonuç tablosunun sütun isimlerinin elektronik tablo başlıklarınızla tam olarak eşleşmesi için ilk satırı sütun başlıkları olarak işlemek için true'u iletin.
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();
}
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();
}
Imports IronXL
Imports System.Data
' Load the workbook from disk
Dim workbook As WorkBook = WorkBook.Load("customers.xlsx")
' Grab the default (first) worksheet
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
' Convert the entire sheet; first row becomes column headers
Dim dataTable As DataTable = worksheet.ToDataTable(True)
' Iterate every row and print each cell value
For Each row As DataRow In dataTable.Rows
For i As Integer = 0 To dataTable.Columns.Count - 1
Console.Write(row(i) & vbTab)
Next
Console.WriteLine()
Next
Kod Ne Yapar
WorkBook.Load, XLSX dosyasını Office otomasyonu olmadan okur. worksheet.ToDataTable(true), sayfadaki her hücreyi yinelemekte ve bunu DataRow'ya eşlemekte, ilk satırı DataColumn isimleri olarak kullanmaktadır. Ortaya çıkan DataTable, standart bir System.Data nesnesidir -- bir DataGridView'ye bağlayabilir, bir SqlBulkCopy'ye geçebilir veya hemen LINQ sorguları çalıştırabilirsiniz.
ToDataTable çağrısı hem XLS hem de XLSX formatlarını destekler, böylece aynı kod eski elektronik tablolar için değişiklik yapmadan çalışır. Tam API referansı için IronXL DataTable ve DataSet dokümantasyonuna bakın.
Belirli Bir Hücre Aralığını DataTable'a Nasıl Aktarırsınız?
Bir çalışma sayfası birden çok veri bölgesi içerdiğinde veya yalnızca satır ve sütunların bir alt kümesine ihtiyaçınız olduğunda, tam sayfa yerine belirli bir hücre aralığını dışa aktarabilirsiniz. Bu yaklaşım, IronXL yalnızca seçili hücreleri işlediğinden büyük dosyalar için daha verimlidir.
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();
}
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();
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("financial_report.xlsx")
' Access a named worksheet
Dim worksheet As WorkSheet = workbook.GetWorkSheet("Summary")
' Select only the region A1:D20 and convert it
Dim dt As DataTable = worksheet("A1:D20").ToDataTable(True)
Console.WriteLine($"Rows: {dt.Rows.Count}, Columns: {dt.Columns.Count}")
For Each row As DataRow In dt.Rows
For Each item In row.ItemArray
Console.Write(item & vbTab)
Next
Console.WriteLine()
Next
Aralık Seçimi Neden Önemlidir
worksheet["A1:D20"] köşeli ayraç söz dizimi bir IronXl.Range nesnesini döndürür. Bu aralık üzerinde ToDataTable çağrısı yapıldığında, işlemeyi tam olarak belirtilen hücrelerle sınırlar, bu da kaynak dosyada on binlerce satır bulunduğunda daha hızlı yürütme ve daha küçük bir hafıza alanı demektir.
Ayrıca adlandırılmış aralıkları da belirtebilir veya aralık dizesini çalışma zamanı sırasında dinamik olarak oluşturabilirsiniz -- örneğin, $"A1:D{lastRow}" -- böylece yöntem, değişken uzunluklu veri dışa aktarımları için esnek olur. Range sınıfı API referansı, mevcut tüm seçme ve sorgulama yöntemlerini belgeler.
Çok Sayfalı Bir Çalışma Kitabını DataSet'e Nasıl Dönüştürürsünüz?
Birden fazla sayfası olan çalışma kitapları, doğrudan System.Data.DataSet ile eşleşir, 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();
}
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();
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("multi_sheet.xlsx")
' Each worksheet becomes a DataTable inside the DataSet
Dim dataSet As DataSet = workbook.ToDataSet()
For Each table As DataTable In dataSet.Tables
Console.WriteLine($"Sheet: {table.TableName}")
Console.WriteLine($"Rows: {table.Rows.Count}")
Console.WriteLine()
Next
Sayfalara İsimle Erişim
Dönen DataSet içindeki her DataTable, özgün çalışma sayfası adını TableName özelliği olarak kullanır, böylece koleksiyonda dolaşmak zorunda kalmadan dataSet.Tables["Summary"] ile belirli bir sayfayı alabilirsiniz. Bu, çok sayfalı raporlama mantığı oluşturmayı veya sonuçları bir veritabanına yazmadan önce birden fazla çalışma sayfasından verileri birleştirmeyi kolaylaştırır.
Birden fazla sayfa ile çalışmanın ve çalışma kitabı yapısında gezinmenin daha fazla yolu için, Excel çalışma sayfalarını açma ve yönetmeye bakın.
Bir DataTable'ı Tekrar Excel Dosyasına Nasıl Aktarırsınız?
Veri aktarma yönü hikayenin sadece yarısıdır. Yapılandırılmış verileri raporlar, indirmeler veya arşivleme için elektronik tablo olarak geri yazmanız gerektiğinde, yeni bir çalışma kitabı oluşturur, hücrelere DataTable ile 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.");
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.");
Imports IronXL
Imports System.Data
' Build a sample DataTable
Dim dt As New DataTable()
dt.Columns.Add(New DataColumn("ProductID", GetType(Integer)))
dt.Columns.Add(New DataColumn("ProductName", GetType(String)))
dt.Columns.Add(New DataColumn("UnitPrice", GetType(Decimal)))
dt.Rows.Add(1, "Widget Pro", 29.99D)
dt.Rows.Add(2, "Gadget Max", 49.99D)
dt.Rows.Add(3, "Sensor Kit", 14.50D)
' Create a new workbook and worksheet
Dim workbook As WorkBook = WorkBook.Create()
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Products")
' Write column headers from DataTable.Columns
For col As Integer = 0 To dt.Columns.Count - 1
worksheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
Next
' Write data rows
For row As Integer = 0 To dt.Rows.Count - 1
For col As Integer = 0 To dt.Columns.Count - 1
worksheet.SetCellValue(row + 1, col, dt.Rows(row)(col))
Next
Next
' 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ğerleri kabul eder, böylece başlık satırı için sütun isimlerini ve veri satırları için ham hücre değerlerini tür dönüşümü olmadan geçebilirsiniz. row + 1 satır kayması, başlıklar için 0. sırayı ayırır. Ortaya çıkan XLSX dosyası tam geçerli bir elektronik tablodur -- yer tutucular veya geçici dosyalar yoktur.
Daha büyük DataTable'lar için, içeriğin manuel biçimlendirme olmadan temiz bir şekilde görüntülenmesi amacıyla sütun otomatik boyutlandırma uygulamayı düşünün.
DataTable'ı DataGridView'e Nasıl Bağlarsınız?
Excel sayfasını bir DataTable'ya dışa aktarmanın en yaygın nedenlerinden biri, Windows Forms DataGridView'de görüntülemektir. Bir DataTable'ye sahip olduğunuzda, bağlama tek satırlık bir koddur.
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;
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;
Imports IronXL
Imports System.Data
Imports System.Windows.Forms
Dim workbook As WorkBook = WorkBook.Load("inventory.xlsx")
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
Dim dataTable As DataTable = worksheet.ToDataTable(True)
' Bind directly to a DataGridView
dataGridViewInventory.DataSource = dataTable
Bağlama Anında Ne Olur
DataSource ayarlamak, DataGridView'ın sütun isimlerini ve satır verilerini DataTable'dan okumasını tetikler. Her DataColumn bir ızgara sütunu olur ve her DataRow görünür bir satır olur. Izgara içindeki yerleşik kontroller aracılığıyla ek kod olmadan sıralama, filtreleme ve seçim davranışını uygulayabilirsiniz.
Bu desen, WPF DataGrid, ASP.NET GridView ve diğer herhangi bir .NET veri-bağlama altyapısı ile eşit derecede iyi çalışır. Adım adım kılavuz için ters yönde, DataGridView'i Excel'e nasıl aktaracağınızı inceleyin.
Bir Dışa Aktarılmış DataTable'da LINQ Sorgularını Nasıl Kullanırsınız?
Bir çalışma sayfasını DataTable'ye dönüştürdükten sonra, AsEnumerable() uzantı yöntemi ile LINQ sorguları çalıştırabilirsiniz, her DataRow'i 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}");
}
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}");
}
Imports IronXL
Imports System.Data
Imports System.Linq
Dim workbook As WorkBook = WorkBook.Load("sales.xlsx")
Dim dt As DataTable = workbook.DefaultWorkSheet.ToDataTable(True)
' Filter rows where the "Revenue" column exceeds 10000
Dim highRevenue = dt.AsEnumerable() _
.Where(Function(row) row.Field(Of Double)("Revenue") > 10000) _
.OrderByDescending(Function(row) row.Field(Of Double)("Revenue")) _
.ToList()
Console.WriteLine($"High-revenue records: {highRevenue.Count}")
For Each row In highRevenue
Console.WriteLine($"{row("Product")}: {row("Revenue"):C}")
Next
Neden DataTable Üzerinde LINQ Faydalıdır
LINQ sorguları, dönüştürülmüş bir çalışma sayfasından veri filtreleme, sıralama, gruplama ve projeksiyon için okunabilir, güçlü bir şekilde yazılmış bir yol sunar. row.Field<t>(columnName), tür zorlamasını temiz bir şekilde ele alır, bir değer dönüştürülemezse gizli bir null döndürmek yerine InvalidCastException'u fırlatır. Bu, veri kalitesi sorunlarını erken fark etmeyi kolaylaştırır.
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ümden alan tabanlı dışa aktarma ile bu yaklaşımı birleştirin.
Dışa Aktarım Sırasında Boş ve Null Hücrelerle Nasıl Baş Edersiniz?
Excel elektronik tablolarında genellikle boşluklar vardır -- boş hücreler, birleştirilmiş bölgeler veya yer tutucu metinler. IronXL, boş hücreleri, mevcut null işleme kodunuzun değiştirilmeden çalışmasını sağlamak için standart ADO.NET davranışına uyacak şekilde DataTable içinde DBNull.Value ile eşler.
| Excel hücre durumu | DataTable değeri | Notlar |
|---|---|---|
| Metin değeri | Metin | Olduğu gibi döndürülür |
| Sayısal değer | Double veya Decimal | Hücre formatına bağlıdır |
| Tarih değeri | DateTime | Seri numarasından ayrıştırılır |
| Boolean değeri | Boolean | Excel'de DOĞRU/YANLIŞ |
| Boş hücre | DBNull.Value | Standart ADO.NET null |
| Formül hücresi | Hesaplanmış sonuç | IronXL önce formülü değerlendirir |
Bir DataTable'yi Excel'e geri yazarken, DBNull.Value alanları boş hücreleri üretir, gidiş-dönüş sadakatini korur. Null alanlar için varsayılan bir dizeye ihtiyaçınız varsa, SetCellValue çağrılmadan önce DBNull.Value'yi yer tutucunuzla değiştirin.
Daha fazla veri hazırlama rehberi için, Microsoft'un DataTable sınıfı dökümantasyonu null işlemi, kısıtlama yönetimi ve satır durumlarını ayrıntılı şekilde ele alır.
Büyük Çalışma Sayfalarını Dışa Aktarırken Bellek Nasıl Tasarruf Edersiniz?
Binlerce satır içeren çalışma sayfaları için, tüm sayfayı bir kerede dışa aktarmak, tüm verileri aynı anda bellekte ayırır. İki IronXL deseni, en yüksek bellek kullanımını azaltır:
- Aralık dışa aktarma: Tüm sayfa yerine sınırlı bir alanı işlemek için
worksheet["A1:D5000"].ToDataTable(true)kullanın. - Yığın işleme:
worksheet.RowCountile son kullanılan satırı hesaplayın, ardından 1.000 satırdan sabit boyuttaki aralıkları döngüsel olarak işleyin ve bir sonraki yığına geçmeden önce her yığını işleyin.
worksheet.RowCount ve worksheet.ColumnCount özellikleri, boyutları sert kodlamadan dinamik aralık dizeleri 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}");
}
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}");
}
Imports IronXL
Imports System.Data
Dim workbook As WorkBook = WorkBook.Load("large_dataset.xlsx")
Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
Dim batchSize As Integer = 1000
Dim totalRows As Integer = worksheet.RowCount
For startRow As Integer = 1 To totalRows Step batchSize
Dim endRow As Integer = Math.Min(startRow + batchSize - 1, totalRows)
Dim rangeAddress As String = $"A{startRow}:Z{endRow}"
Dim batch As DataTable = worksheet(rangeAddress).ToDataTable(False)
' Process each batch -- write to database, transform, etc.
Console.WriteLine($"Processed rows {startRow} to {endRow}")
Next
Bu desen, hafıza kısıtlarının uygulandığı durumlarda C#'da büyük Excel dosyalarını okuma için özellikle önemlidir.
DataTable'ı Veritabanına Nasıl Yazarsınız?
Bir DataTable'ye sahip olduğunuzda, SQL Server'a SqlBulkCopy aracılığıyla eklemek, büyük veri kümeleri için en hızlı yoldur. SqlBulkCopy, bir DataTable'i doğrudan kabul eder ve bireysel INSERT ifadeleri oluşturmadan satırları yığınlar halinde yayar.
using IronXL;
using System.Data;
using Microsoft.Data.SqlClient;
WorkBook workbook = WorkBook.Load("orders.xlsx");
DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
string connectionMetin = "Server=.;Database=OrdersDB;Trusted_Connection=True;";
using SqlConnection connection = new(connectionMetin);
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.");
using IronXL;
using System.Data;
using Microsoft.Data.SqlClient;
WorkBook workbook = WorkBook.Load("orders.xlsx");
DataTable dataTable = workbook.DefaultWorkSheet.ToDataTable(true);
string connectionMetin = "Server=.;Database=OrdersDB;Trusted_Connection=True;";
using SqlConnection connection = new(connectionMetin);
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.");
Imports IronXL
Imports System.Data
Imports Microsoft.Data.SqlClient
Dim workbook As WorkBook = WorkBook.Load("orders.xlsx")
Dim dataTable As DataTable = workbook.DefaultWorkSheet.ToDataTable(True)
Dim connectionMetin As String = "Server=.;Database=OrdersDB;Trusted_Connection=True;"
Using connection As New SqlConnection(connectionMetin)
connection.Open()
Using bulkCopy As New SqlBulkCopy(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)
End Using
End Using
Console.WriteLine("Bulk insert complete.")
Sütun Eşleştirme Dikkatleri
ColumnMappings koleksiyonu, sütun isimlerini veritabanı sütun isimleriyle eşleştirir. Her iki isim de aynı ise, bireysel eşlemeleri atlayabilir ve SqlBulkCopy, isimle otomatik olarak eşleşir. Açık eşlemeler, elektronik tablo sütun sırası veritabanı şemasıyla farklı olduğunda daha güvenlidir.
IronXL ile veritabanı iş akışlarını birleştirme hakkında daha fazla bilgi için, C# Excel içe aktarma kılavuzu, ek içe aktarma senaryolarını kapsar, eklemeden önce doğrulama dahil.
Entity Framework tabanlı projeler için, DataTable satırlarını ilk olarak tipli model nesnelerine dönüştürün, ardından EFCore.BulkExtensions gibi bir kütüphaneden DbContext.BulkInsert'i ORM'e duyarlı yığın ekleme için kullanın. Microsoft'un SqlBulkCopy dökümantasyonu, toplama seçeneklerini ve işlem desteğini ayrıntılı olarak açıklar.
Sıradaki Adımlarınız Neler?
Artık IronXL kullanarak verileri her iki yönde de Excel ve DataTable arasında taşımak için tam bir araç setine sahipsiniz:
- Başlık farkında dışa aktarımlar için
worksheet.ToDataTable(true)ile tam bir çalışma sayfası dönüştürün worksheet["A1:D20"].ToDataTable(true)söz dizimi ile belirli bir hücre aralığını dışa aktarınworkbook.ToDataSet()ile çok sayfalı çalışma kitaplarını tamDataSeterişimi için dönüştürünDataTableiçeriğini,DataRowdeğerleriniSetCellValueile yineleyerek XLSX'e geri yazınDataTable'yi,DataGridViewgibi UI kontrollerine tek birDataSourceataması ile bağlayın- Yüksek verimli veritabanı eklemeleri için
DataTable'dan doğrudanSqlBulkCopybesleyin
IronXL becerilerinizi derinleştirmek için, bu ilgili konuları keşfedin:
- DataSet ve DataTable'ı dışa aktarma -- tam API referansı
- C#'da OleDb olmadan Excel'i DataTable'a dönüştürme
- C# DataTable'dan Excel'e dışa aktarma eğitimi
- ASP.NET'ten DataTable'ı Excel'e dışa aktarma
- Bir DataTable'ı Excel'e dışa aktarmanın en hızlı yolu
- C#'da Excel dosyalarını yükleme ve okuma
- Biçimlendirme ile Excel dosyalarını dışa aktarma
- C#'da Excel dosyalarını okuma -- en iyi uygulamalar
- C# Excel aralığı seçimi ve manipülasyonu
- C# uygulamasına Excel verilerini içe aktarma
Bu örnekleri kendi projelerinizde çalıştırmak için bir ücretsiz IronXL deneme lisansı ile başlayın. Dağıtıma hazır olduğunuzda, bir üretim lisansı satın alın veya lisans rehberliği için ekiple sohbet edin.
Sıkça Sorulan Sorular
IronXL kullanarak C#'de Excel verilerini bir DataTable'e nasıl aktarabilirim?
Excel dosyasını IronXL'ye yükleyerek, çalışma sayfasını veya aralığı seçerek ve ardından ExportToDataTable yöntemini kullanarak verileri bir DataTable nesnesine dönüştürerek, C#'de Excel verilerini bir DataTable'e aktarabilirsiniz.
Excel verilerini bir DataTable'e dönüştürmenin faydaları nelerdir?
Excel verilerini bir DataTable'e dönüştürmek, veri tabanı operasyonları, UI kontrollerine veri bağı ve sorunsuz .NET entegrasyonu için ideal olan yapılandırılmış veriler sağlar. Ayrıca, C# uygulamaları içinde verilerin kolay manipülasyonu ve işlenmesini sağlar.
IronXL, Excel ve DataTable arasında verilerin hem içe hem de dışa aktarımını yönetebilir mi?
Evet, IronXL, hem Excel'den bir DataTable'e veri aktarma hem de bir DataTable'den Excel'e veri aktarma işlemlerini verimli bir şekilde yönetir, bu da C# uygulamalarında veri alışverişini yönetmek için çok yönlü bir araç haline getirir.
IronXL'yi kullanarak bir Excel sayfasındaki belirli aralıkları bir DataTable'e dönüştürmek mümkün mü?
Evet, IronXL, Excel sayfasında belirli aralıkları seçmenize ve bunları bir DataTable'e dönüştürmenize izin verir, bu da veri manipülasyonu ve çıkarımı konusunda esneklik sağlar.
IronXL'yi Excel veri dönüşümü için kullanmak için bilgisayarımda Microsoft Office kurulu olması gerekiyor mu?
Hayır, Excel verilerini bir DataTable'e dönüştürmek veya tersi işlemler için IronXL'yi kullanmak için bilgisayarınıza Microsoft Office kurulu olması gerekmez. IronXL, Microsoft Office'ten bağımsız çalışır.
IronXL ile Excel'den DataTable'e hangi tür veriler dönüştürülebilir?
IronXL, Excel'deki sayı, metin, tarih ve formüller dahil olmak üzere çeşitli veri türlerini dönüştürerek DataTable formatında verilerin bütünlüğünü ve yapısını korur.
IronXL, bir DataTable'i tekrar bir Excel dosyasına aktarabilir mi?
Evet, IronXL, bir DataTable'i tekrar bir Excel dosyasına aktarabilir, böylece doğrudan C# uygulamalarınızdan raporlar oluşturmanızı veya veri depolama çözümleri oluşturmanızı sağlar.




