Altbilgi içeriğine atla
IRONXL KULLANARAK

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

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:

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();
}
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
$vbLabelText   $csharpLabel

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();
}
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
$vbLabelText   $csharpLabel

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();
}
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
$vbLabelText   $csharpLabel

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.");
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.")
$vbLabelText   $csharpLabel

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;
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
$vbLabelText   $csharpLabel

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}");
}
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
$vbLabelText   $csharpLabel

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 durumu DataTable değeri Açıklamalar
Metin değeri Dize Olduğu gibi döndürülür
Sayısal değer Çift veya Ondalık Hücre formatına bağlıdır
Tarih değeri DateTime Seri numaradan ayrıştırılır
Mantıksal değer 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'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}");
}
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
$vbLabelText   $csharpLabel

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.");
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.");
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 connectionDize As String = "Server=.;Database=OrdersDB;Trusted_Connection=True;"

Using connection As New SqlConnection(connectionDize)
    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.")
$vbLabelText   $csharpLabel

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.

Şimdi IronXL ile başlayın.
green arrow pointer

Sıkça Sorulan Sorular

IronXL kullanarak C#'da Excel verilerini bir DataTable'a nasıl aktarabilirim?

C# içinde IronXL kullanarak Excel verilerini bir DataTable'a aktarabilirsiniz. Excel dosyasını IronXL'ye yükleyin, çalışma sayfası veya aralığı seçin ve ardından verileri bir DataTable nesnesine dönüştürmek için ExportToDataTable yöntemini kullanın.

Excel verilerini bir DataTable'a dönüştürmenin faydaları nelerdir?

Excel verilerini bir DataTable'a dönüştürmek, veritabanı işlemleri, UI kontrollerine veri bağlama ve sorunsuz .NET entegrasyonu için ideal olan yapılandırılmış veriler sağlar. Ayrıca, verilerin C# uygulamaları içinde kolayca manipüle edilmesini ve işlenmesini kolaylaştırır.

IronXL, Excel ile DataTable arasında veri aktarmayı hem içe hem de dışa aktarabiliyor mu?

Evet, IronXL Excel'den bir DataTable'a veri aktarmayı ve bir DataTable'dan Excel'e veri aktarmayı etkin bir şekilde yönetir, bu da onu C# uygulamalarında veri değişimini yönetmek için çok yönlü bir araç haline getirir.

IronXL, bir Excel sayfasındaki belirli aralıkları bir DataTable'a dönüştürebilir mi?

Evet, IronXL, bir Excel sayfasındaki belirli aralıkları seçmenize ve onları bir DataTable'a dönüştürmenize olanak tanır, bu da veri manipülasyonu ve çıkarmada esneklik sağlar.

IronXL'yi Excel veri dönüşümü için kullanmak için Microsoft Office yüklü olmam gerekiyor mu?

Hayır, Excel verilerini DataTable'a veya tam tersi şekilde dönüştürmek için IronXL'yi kullanmak için makinenizde Microsoft Office yüklü olması gerekmez. IronXL, Microsoft Office'ten bağımsız çalışır.

IronXL kullanarak Excel'den DataTable'a dönüştürülebilecek veri türleri nelerdir?

IronXL, Excel'den sayılar, metin, tarihler ve formüller gibi çeşitli veri türlerini DataTable formatında, veri bütünlüğünü ve yapısını koruyarak dönüştürebilir.

IronXL, bir DataTable'ı tekrar bir Excel dosyasına aktarabilir mi?

Evet, IronXL, bir DataTable'ı tekrar bir Excel dosyasına aktarabilir, böylece C# uygulamalarınızdan doğrudan raporlar oluşturmanızı veya veri depolama çözümleri oluşturmanızı sağlar.

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ı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara