IronXL Kullanarak Office Gerektirmeyen C# Dilinde DataSet'i Excel'e Aktarma
C# dilinde bir DataSet veya DataTable'ı Excel'e ihraç etmek, yapılandırılmış bellek içi veriyi profesyonel elektronik tablo dosyalarına dönüştürmenin güvenilir bir yolunu sunar -- hedef makinede Microsoft Office kurulu olmasına gerek kalmadan. İster bir SQL veritabanından kayıtlar çekin, ister bir DataSet'i programlı olarak oluşturun, ister mevcut bir DataGrid ile çalışın, IronXL tüm hattı temiz, kod-öncelikli bir API aracılığıyla yönetir. Bu kılavuz, üst düzey C# ifadeleri ve .NET 10 kullanarak tek tablolu dışa aktarmadan çoklu sayfa çalışma kitaplarına ve canlı veritabanı sorgu sonuçlarına kadar her büyük senaryoyu anlatıyor.
IronXL'i bir kez yükleyin, birkaç satır kod yazın ve veriniz bir Office bağımlılığı olmadan bir XLSX dosyasındadır. Aşağıdaki bölümler, kendi projelerinize doğrudan kopyala-yapıştır yapabileceğiniz şekilde kurulum, temel desenler, gelişmiş formatlama ve veritabanı entegrasyonunu kapsar.
Excel İhracatı İçin IronXL Nasıl Kurulur?
Herhangi bir ihracat kodu yazmadan önce IronXL'i projenize NuGet Paket Yöneticisi aracılığıyla ekleyin. Proje root'unuzda bir terminal açın ve .NET CLI komutunu çalıştırın veya Visual Studio'daki Paket Yöneticisi Konsolunu Install-Package komutuyla kullanın:
dotnet add package IronXl.Excel
# Or in Visual Studio Package Manager Console:
# Install-Package IronXl.Excel
dotnet add package IronXl.Excel
# Or in Visual Studio Package Manager Console:
# Install-Package IronXl.Excel
Kurulumdan sonra, IronXL ad alanını içeri aktarmak için üst düzey bir using ifadesi ekleyin:
using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
IronXL, .NET 8, .NET 9 ve .NET 10'un yanı sıra daha eski .NET Framework sürümlerini (4.6.2+) de hedefler. Hiçbir makinede -- sunucu, masaüstü veya bulut -- Office kurulumu gerekmez. Paket yüklendikten sonra, tamamen yönetilen kodda XLSX, XLS ve CSV dosyaları oluşturabilir, okuyabilir ve yazabilirsiniz.
Detaylı kurulum seçenekleri için, IronXL kurulum kılavuzu ve sürüm geçmişi için NuGet paket sayfasına bakın.
Tek Bir DataTable'ı Excel Dosyasına Nasıl Aktarırsınız?
En yaygın senaryo, tek bir DataTable'ı tek bir çalışma sayfasına aktarmaktır. IronXL'nin WorkBook ve WorkSheet sınıfları, Excel nesne modeline doğal olarak eşlenir. Bir çalışma kitabı oluşturun, bir çalışma sayfası ekleyin, ardından DataTable'nın sütunlarını ve satırlarını yineleyin.
Aşağıdaki örnek, bellekte bir Employees DataTable oluşturur ve bunu EmployeeData.xlsx'a yazar:
using IronXL;
using System.Data;
// Build an in-memory DataTable
DataTable dt = new DataTable("Employees");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Rows.Add(1, "John Smith", "Engineering");
dt.Rows.Add(2, "Sarah Jones", "Marketing");
dt.Rows.Add(3, "Mike Wilson", "Sales");
// Create a workbook and a named worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Write column headers in row 0
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
// Write data rows starting at row 1
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].ToString());
}
}
workbook.SaveAs("EmployeeData.xlsx");
using IronXL;
using System.Data;
// Build an in-memory DataTable
DataTable dt = new DataTable("Employees");
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Department", typeof(string));
dt.Rows.Add(1, "John Smith", "Engineering");
dt.Rows.Add(2, "Sarah Jones", "Marketing");
dt.Rows.Add(3, "Mike Wilson", "Sales");
// Create a workbook and a named worksheet
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("Employees");
// Write column headers in row 0
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
// Write data rows starting at row 1
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].ToString());
}
}
workbook.SaveAs("EmployeeData.xlsx");
Imports IronXL
Imports System.Data
' Build an in-memory DataTable
Dim dt As New DataTable("Employees")
dt.Columns.Add("ID", GetType(Integer))
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Department", GetType(String))
dt.Rows.Add(1, "John Smith", "Engineering")
dt.Rows.Add(2, "Sarah Jones", "Marketing")
dt.Rows.Add(3, "Mike Wilson", "Sales")
' Create a workbook and a named worksheet
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")
' Write column headers in row 0
For col As Integer = 0 To dt.Columns.Count - 1
worksheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
Next
' Write data rows starting at row 1
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).ToString())
Next
Next
workbook.SaveAs("EmployeeData.xlsx")
Çıktı

SetCellValue int, double, string ve bool kabul eder -- böylece ekstra tür dönüşümü yapmadan yerel Excel hücre türlerini elde edersiniz. Döngü deseni, IronXL doğrudan belleğe yazar ve SaveAs çağrıldığında yalnızca diske yazarak, bu süreci binlerce satır için bile verimli hale getirir.
Okuma ve yazma tekniklerine daha geniş bir bakış için, IronXL C# eğitimi, bu ihracat düzeninin yanı sıra dosya işlemlerinin tamamını kapsar.
DataSet'i Birden Çok Excel Çalışma Sayfasına Nasıl Aktarırsınız?
Bir DataSet birden çok ilişkili tablo içerdiğinde -- örneğin, Ürünler ve Siparişler -- her DataTable'ı tek bir çalışma kitabındaki kendi çalışma sayfasına eşleyebilirsiniz. Bu, alıcıların bir dosyada tüm ilgili verileri görmelerini sağlar ve birden fazla belge açmalarına gerek kalmaz.
Aşağıdaki döngü ds.Tables üzerinde iterasyon yapar ve her tablo için bir sayfa oluşturur:
using IronXL;
using System.Data;
// Build a DataSet with two related tables
DataSet ds = new DataSet("CompanyData");
DataTable dtProducts = new DataTable("Products");
dtProducts.Columns.Add("ProductID", typeof(int));
dtProducts.Columns.Add("ProductName", typeof(string));
dtProducts.Columns.Add("Price", typeof(decimal));
dtProducts.Rows.Add(101, "Widget A", 29.99m);
dtProducts.Rows.Add(102, "Widget B", 49.99m);
ds.Tables.Add(dtProducts);
DataTable dtOrders = new DataTable("Orders");
dtOrders.Columns.Add("OrderID", typeof(int));
dtOrders.Columns.Add("Customer", typeof(string));
dtOrders.Columns.Add("Total", typeof(decimal));
dtOrders.Rows.Add(1001, "Acme Corp", 599.90m);
dtOrders.Rows.Add(1002, "Tech Inc", 299.95m);
ds.Tables.Add(dtOrders);
// Create one workbook and iterate each DataTable
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
foreach (DataTable table in ds.Tables)
{
WorkSheet sheet = workbook.CreateWorkSheet(table.TableName);
// Write headers
for (int col = 0; col < table.Columns.Count; col++)
{
sheet.SetCellValue(0, col, table.Columns[col].ColumnName);
}
// Write rows
for (int row = 0; row < table.Rows.Count; row++)
{
for (int col = 0; col < table.Columns.Count; col++)
{
sheet.SetCellValue(row + 1, col, table.Rows[row][col].ToString());
}
}
}
workbook.SaveAs("CompanyReport.xlsx");
using IronXL;
using System.Data;
// Build a DataSet with two related tables
DataSet ds = new DataSet("CompanyData");
DataTable dtProducts = new DataTable("Products");
dtProducts.Columns.Add("ProductID", typeof(int));
dtProducts.Columns.Add("ProductName", typeof(string));
dtProducts.Columns.Add("Price", typeof(decimal));
dtProducts.Rows.Add(101, "Widget A", 29.99m);
dtProducts.Rows.Add(102, "Widget B", 49.99m);
ds.Tables.Add(dtProducts);
DataTable dtOrders = new DataTable("Orders");
dtOrders.Columns.Add("OrderID", typeof(int));
dtOrders.Columns.Add("Customer", typeof(string));
dtOrders.Columns.Add("Total", typeof(decimal));
dtOrders.Rows.Add(1001, "Acme Corp", 599.90m);
dtOrders.Rows.Add(1002, "Tech Inc", 299.95m);
ds.Tables.Add(dtOrders);
// Create one workbook and iterate each DataTable
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
foreach (DataTable table in ds.Tables)
{
WorkSheet sheet = workbook.CreateWorkSheet(table.TableName);
// Write headers
for (int col = 0; col < table.Columns.Count; col++)
{
sheet.SetCellValue(0, col, table.Columns[col].ColumnName);
}
// Write rows
for (int row = 0; row < table.Rows.Count; row++)
{
for (int col = 0; col < table.Columns.Count; col++)
{
sheet.SetCellValue(row + 1, col, table.Rows[row][col].ToString());
}
}
}
workbook.SaveAs("CompanyReport.xlsx");
Imports IronXL
Imports System.Data
' Build a DataSet with two related tables
Dim ds As New DataSet("CompanyData")
Dim dtProducts As New DataTable("Products")
dtProducts.Columns.Add("ProductID", GetType(Integer))
dtProducts.Columns.Add("ProductName", GetType(String))
dtProducts.Columns.Add("Price", GetType(Decimal))
dtProducts.Rows.Add(101, "Widget A", 29.99D)
dtProducts.Rows.Add(102, "Widget B", 49.99D)
ds.Tables.Add(dtProducts)
Dim dtOrders As New DataTable("Orders")
dtOrders.Columns.Add("OrderID", GetType(Integer))
dtOrders.Columns.Add("Customer", GetType(String))
dtOrders.Columns.Add("Total", GetType(Decimal))
dtOrders.Rows.Add(1001, "Acme Corp", 599.90D)
dtOrders.Rows.Add(1002, "Tech Inc", 299.95D)
ds.Tables.Add(dtOrders)
' Create one workbook and iterate each DataTable
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
For Each table As DataTable In ds.Tables
Dim sheet As WorkSheet = workbook.CreateWorkSheet(table.TableName)
' Write headers
For col As Integer = 0 To table.Columns.Count - 1
sheet.SetCellValue(0, col, table.Columns(col).ColumnName)
Next
' Write rows
For row As Integer = 0 To table.Rows.Count - 1
For col As Integer = 0 To table.Columns.Count - 1
sheet.SetCellValue(row + 1, col, table.Rows(row)(col).ToString())
Next
Next
Next
workbook.SaveAs("CompanyReport.xlsx")
Çıktı

Her çalışma sayfası, kaynağı olan DataTable'a göre adlandırılır, Excel içinde gezinmeyi kolaylaştırır. WorkBook.Create çalışma kitabını bellekte tahsis ettiği için, döngüde dosyayı yeniden açmadan çalışma sayfaları eklemeye devam edebilirsiniz -- IronXL, diske yazmadan önce tüm XLSX yapısını oluşturur.
IronXL WorkBook belgesi, Çalışma Kitabı nesnesindeki kullanılabilir tüm yöntemleri listeler, bunlara sayfa sıralamasını değiştirme, şifre koruma ve XLSX dışında formatlarda kaydetme de dahildir.
Excel Çıktılarına Başlık Formatlama Nasıl Eklenir?
Sade veri aktarımları işlevseldir, ancak kalın başlıklar ve sütun genişlikleri eklemek, çıktıyı iş bağlamında hemen kullanılabilir hale getirir. IronXL, herhangi bir WorkSheet aralığına eklenmiş Style nesnesi aracılığıyla hücre ve aralık stillendirmesini sunar.
Aşağıdaki kesit, başlık satırına kalın yazı formatı uygular ve veri yazıldıktan sonra sütunları otomatik olarak boyutlandırır:
using IronXL;
using System.Data;
DataTable dt = new DataTable("Sales");
dt.Columns.Add("Region", typeof(string));
dt.Columns.Add("Q1", typeof(decimal));
dt.Columns.Add("Q2", typeof(decimal));
dt.Columns.Add("Q3", typeof(decimal));
dt.Columns.Add("Q4", typeof(decimal));
dt.Rows.Add("Hayırrth", 120000m, 135000m, 142000m, 158000m);
dt.Rows.Add("South", 98000m, 104000m, 112000m, 121000m);
dt.Rows.Add("East", 87000m, 93000m, 99000m, 108000m);
dt.Rows.Add("West", 145000m, 152000m, 161000m, 174000m);
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");
// Write and style headers
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
sheet["A1:E1"].Style.Font.Bold = true;
sheet["A1:E1"].Style.Font.Height = 12;
}
// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
}
}
workbook.SaveAs("SalesReport.xlsx");
using IronXL;
using System.Data;
DataTable dt = new DataTable("Sales");
dt.Columns.Add("Region", typeof(string));
dt.Columns.Add("Q1", typeof(decimal));
dt.Columns.Add("Q2", typeof(decimal));
dt.Columns.Add("Q3", typeof(decimal));
dt.Columns.Add("Q4", typeof(decimal));
dt.Rows.Add("Hayırrth", 120000m, 135000m, 142000m, 158000m);
dt.Rows.Add("South", 98000m, 104000m, 112000m, 121000m);
dt.Rows.Add("East", 87000m, 93000m, 99000m, 108000m);
dt.Rows.Add("West", 145000m, 152000m, 161000m, 174000m);
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Sales");
// Write and style headers
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
sheet["A1:E1"].Style.Font.Bold = true;
sheet["A1:E1"].Style.Font.Height = 12;
}
// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(row + 1, col, dt.Rows[row][col]);
}
}
workbook.SaveAs("SalesReport.xlsx");
Imports IronXL
Imports System.Data
Dim dt As New DataTable("Sales")
dt.Columns.Add("Region", GetType(String))
dt.Columns.Add("Q1", GetType(Decimal))
dt.Columns.Add("Q2", GetType(Decimal))
dt.Columns.Add("Q3", GetType(Decimal))
dt.Columns.Add("Q4", GetType(Decimal))
dt.Rows.Add("Hayırrth", 120000D, 135000D, 142000D, 158000D)
dt.Rows.Add("South", 98000D, 104000D, 112000D, 121000D)
dt.Rows.Add("East", 87000D, 93000D, 99000D, 108000D)
dt.Rows.Add("West", 145000D, 152000D, 161000D, 174000D)
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workbook.CreateWorkSheet("Sales")
' Write and style headers
For col As Integer = 0 To dt.Columns.Count - 1
sheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
sheet("A1:E1").Style.Font.Bold = True
sheet("A1:E1").Style.Font.Height = 12
Next
' Write data rows
For row As Integer = 0 To dt.Rows.Count - 1
For col As Integer = 0 To dt.Columns.Count - 1
sheet.SetCellValue(row + 1, col, dt.Rows(row)(col))
Next
Next
workbook.SaveAs("SalesReport.xlsx")
Style.Font.Bold özelliği, tek bir ifadeyle tüm başlık aralığına uygulanır. IronXL ayrıca arka plan renkleri (Style.BackgroundColor), kenarlık stilleri (Style.Border), numara formatları (Style.NumberFormat.FormatCode) ve yatay hizalamayı (Style.HorizontalAlignment) destekler. Tam stil referansı için, IronXL hücre formatlama kılavuzuna bakın.
Veritabanı Sorgu Sonuçlarını Excel'e Nasıl Aktarırsınız?
Bir SQL veritabanına bağlanmak ve sonuçları doğrudan Excel'e aktarmak büyük bir gerçek dünya kullanım senaryosunu kapsar -- planlanan raporlar, veri anlık görüntüleri ve idari aktarımlar. Yaklaşım, SqlDataAdapter kullanarak bir DataSet'i doldurur, ardından elde edilen DataTable'ı bir IronXL çalışma sayfasına eşler.
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Server=localhost;Database=SalesDB;Integrated Security=True;";
string query = "SELECT CustomerID, CompanyName, ContactName, Country FROM Customers";
// Fill DataSet from SQL query
DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
adapter.Fill(ds, "Customers");
}
DataTable dt = ds.Tables["Customers"]!;
// Create workbook and export
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("CustomerData");
// Bold header row
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
worksheet["A1:D1"].Style.Font.Bold = true;
// Write rows, handling DBNull values safely
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
object cellValue = dt.Rows[row][col];
worksheet.SetCellValue(row + 1, col,
cellValue == DBNull.Value ? "" : cellValue.ToString()!);
}
}
workbook.SaveAs("CustomerExport.xlsx");
Console.WriteLine("Export complete.");
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Server=localhost;Database=SalesDB;Integrated Security=True;";
string query = "SELECT CustomerID, CompanyName, ContactName, Country FROM Customers";
// Fill DataSet from SQL query
DataSet ds = new DataSet();
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
adapter.Fill(ds, "Customers");
}
DataTable dt = ds.Tables["Customers"]!;
// Create workbook and export
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet worksheet = workbook.CreateWorkSheet("CustomerData");
// Bold header row
for (int col = 0; col < dt.Columns.Count; col++)
{
worksheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
}
worksheet["A1:D1"].Style.Font.Bold = true;
// Write rows, handling DBNull values safely
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
object cellValue = dt.Rows[row][col];
worksheet.SetCellValue(row + 1, col,
cellValue == DBNull.Value ? "" : cellValue.ToString()!);
}
}
workbook.SaveAs("CustomerExport.xlsx");
Console.WriteLine("Export complete.");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient
Dim connectionString As String = "Server=localhost;Database=SalesDB;Integrated Security=True;"
Dim query As String = "SELECT CustomerID, CompanyName, ContactName, Country FROM Customers"
' Fill DataSet from SQL query
Dim ds As New DataSet()
Using connection As New SqlConnection(connectionString)
Dim adapter As New SqlDataAdapter(query, connection)
adapter.Fill(ds, "Customers")
End Using
Dim dt As DataTable = ds.Tables("Customers")
' Create workbook and export
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet As WorkSheet = workbook.CreateWorkSheet("CustomerData")
' Bold header row
For col As Integer = 0 To dt.Columns.Count - 1
worksheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
Next
worksheet("A1:D1").Style.Font.Bold = True
' Write rows, handling DBNull values safely
For row As Integer = 0 To dt.Rows.Count - 1
For col As Integer = 0 To dt.Columns.Count - 1
Dim cellValue As Object = dt.Rows(row)(col)
worksheet.SetCellValue(row + 1, col, If(cellValue Is DBNull.Value, "", cellValue.ToString()))
Next
Next
workbook.SaveAs("CustomerExport.xlsx")
Console.WriteLine("Export complete.")
Veritabanı Aktarımları İçin Ana Hayırktalar
null guard (cellValue == DBNull.Value ? "" : cellValue.ToString()) prevents exceptions when the database returns NULL değerleri - isteğe bağlı sütunlarda sık rastlanan bir durumdur. Başlık satırındaki kalın formatlama, rapor alıcılarının hemen başlık ve verileri ayırt etmesine olanak tanır.
Excel'den C# nesnelerine veri geri okuma örüntüleri hakkında daha fazla bilgi için, IronXL DataTable dışa aktarma eğitimi, bu iş akışını tersine nasıl çevirebileceğinizi gösterir.
IronXL'i Diğer Excel Dışa Aktarma Yaklaşımlarıyla Nasıl Karşılaştırırsınız?
Bir kütüphane seçmeden önce, veri kümeleri için dışa aktarma senaryolarında önemli olan alanlarda ana seçeneklerin birbirine nasıl yığıldığını anlamak faydalı olur.
| Yaklaşım | Ofis Gerekli | XLSX Desteği | Stil API'si | Çoklu-Sayfa | Performans (büyük veri) |
|---|---|---|---|---|---|
| IronXL | Hayır | Evet | Tam | Evet | High |
| Microsoft Office Interop | Evet | Evet | Tam | Evet | Low |
| EPPlus | Hayır | Evet | Kısmi | Evet | High |
| ClosedXML | Hayır | Evet | Kısmi | Evet | Medium |
| CSV (manuel) | Hayır | Hayır | Hayırne | Hayır | Çok yüksek |
Microsoft Office Interop yalnızca Windows makinelerinde Office kurulu olduğunda çalışır, bu da sunucu dağıtımları ve bulut fonksiyonları için elverişsiz hale gelir. IronXL, EPPlus ve ClosedXML tümü sunucu tarafı üretimi destekler -- temel ayrım, stil API'sinin genişliği ve lisanslama modelidir. IronXL'nin lisansı ticari kullanımı içerir ve .NET hedef çerçevelerinin tümünü tek paketten kapsar.
Üçüncü taraf karşılaştırmaları ve referanslar için, doğru seçim yapmak için Microsoft'un Excel dosya formatları hakkındaki belgeleri ve EPPlus proje sayfası ek bağlam sağlar.
Büyük Veri Kümelerini Hafıza Sorunları Olmadan Nasıl Yönetirsiniz?
On binlerce satıra sahip DataTable'ları dışa aktarırken, bellek kullanımının tahmin edilebilir kalması önemlidir. Aşağıdaki desen, bir IDataReader'den veri akışı yapar ve böylece önce tüm sonuç kümesini bir DataTable'a yüklemek yerine, hem okuyucu tamponunu hem de DataTable'ı aynı anda tutmanın oluşturduğu çift bellek maliyetini önler.
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Server=localhost;Database=InventoryDB;Integrated Security=True;";
string query = "SELECT ProductID, SKU, Description, StockLevel, UnitCost FROM Products";
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Inventory");
using SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
using SqlCommand cmd = new SqlCommand(query, conn);
using SqlDataReader reader = cmd.ExecuteReader();
// Write schema-derived headers
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.SetCellValue(0, col, reader.GetName(col));
}
// Stream rows directly into IronXL without buffering a DataTable
int excelRow = 1;
while (reader.Read())
{
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.SetCellValue(excelRow, col,
reader.IsDBNull(col) ? "" : reader.GetValue(col).ToString()!);
}
excelRow++;
}
workbook.SaveAs("InventoryExport.xlsx");
Console.WriteLine($"Exported {excelRow - 1} rows.");
using IronXL;
using System.Data;
using System.Data.SqlClient;
string connectionString = "Server=localhost;Database=InventoryDB;Integrated Security=True;";
string query = "SELECT ProductID, SKU, Description, StockLevel, UnitCost FROM Products";
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Inventory");
using SqlConnection conn = new SqlConnection(connectionString);
conn.Open();
using SqlCommand cmd = new SqlCommand(query, conn);
using SqlDataReader reader = cmd.ExecuteReader();
// Write schema-derived headers
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.SetCellValue(0, col, reader.GetName(col));
}
// Stream rows directly into IronXL without buffering a DataTable
int excelRow = 1;
while (reader.Read())
{
for (int col = 0; col < reader.FieldCount; col++)
{
sheet.SetCellValue(excelRow, col,
reader.IsDBNull(col) ? "" : reader.GetValue(col).ToString()!);
}
excelRow++;
}
workbook.SaveAs("InventoryExport.xlsx");
Console.WriteLine($"Exported {excelRow - 1} rows.");
Imports IronXL
Imports System.Data
Imports System.Data.SqlClient
Dim connectionString As String = "Server=localhost;Database=InventoryDB;Integrated Security=True;"
Dim query As String = "SELECT ProductID, SKU, Description, StockLevel, UnitCost FROM Products"
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workbook.CreateWorkSheet("Inventory")
Using conn As New SqlConnection(connectionString)
conn.Open()
Using cmd As New SqlCommand(query, conn)
Using reader As SqlDataReader = cmd.ExecuteReader()
' Write schema-derived headers
For col As Integer = 0 To reader.FieldCount - 1
sheet.SetCellValue(0, col, reader.GetName(col))
Next
' Stream rows directly into IronXL without buffering a DataTable
Dim excelRow As Integer = 1
While reader.Read()
For col As Integer = 0 To reader.FieldCount - 1
sheet.SetCellValue(excelRow, col, If(reader.IsDBNull(col), "", reader.GetValue(col).ToString()))
Next
excelRow += 1
End While
workbook.SaveAs("InventoryExport.xlsx")
Console.WriteLine($"Exported {excelRow - 1} rows.")
End Using
End Using
End Using
Bu model, sonuç kümesi 50.000 satırı aşabileceğinde ya da hafızayla sınırlı bir hizmet içinde çalışırken önerilir. IronXL performans belgeleri, yüksek hacimli dışa aktarımlar için ek bellek ve veri işleme ayar seçeneklerini kapsar.
Çok Büyük Dışa Aktarımlar İçin CSV'ye Toplu Kaydetme
Yarım milyon satırı aşan dışa aktarımlar için, bellek aşırı sıkı olduğunda, çıktıyı birden çok çalışma kitabına bölmeyi veya CSV formatına aktarmayı düşünebilirsiniz:
using IronXL;
// IronXL can save any workbook as CSV
workbook.SaveAs("LargeExport.csv");
using IronXL;
// IronXL can save any workbook as CSV
workbook.SaveAs("LargeExport.csv");
Imports IronXL
' IronXL can save any workbook as CSV
workbook.SaveAs("LargeExport.csv")
CSV, formatlama ve çoklu sayfa desteğini kaybeder fakat ham sınırlı veriyi tüketen aşağı akış ETL süreçleri için geçerli kalır.
Excel Dosyalarını Farklı Formatlar ve Konumlara Nasıl Kaydedersiniz?
IronXL, dosya yoluna, MemoryStream ve byte[] kaydetmeyi destekler -- bu, Excel'i bir indirme yanıtı olarak döndüren ASP.NET uygulamaları için önemlidir.
using IronXL;
using System.IO;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");
sheet.SetCellValue(0, 0, "Generated Report");
// Save to file path
workbook.SaveAs("Report.xlsx");
// Save as XLS (legacy format)
workbook.SaveAs("Report.xls");
// Save to MemoryStream for HTTP response
using MemoryStream ms = new MemoryStream();
workbook.SaveAs(ms);
byte[] fileBytes = ms.ToArray();
// fileBytes can be returned from an ASP.NET controller action
using IronXL;
using System.IO;
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workbook.CreateWorkSheet("Report");
sheet.SetCellValue(0, 0, "Generated Report");
// Save to file path
workbook.SaveAs("Report.xlsx");
// Save as XLS (legacy format)
workbook.SaveAs("Report.xls");
// Save to MemoryStream for HTTP response
using MemoryStream ms = new MemoryStream();
workbook.SaveAs(ms);
byte[] fileBytes = ms.ToArray();
// fileBytes can be returned from an ASP.NET controller action
Imports IronXL
Imports System.IO
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workbook.CreateWorkSheet("Report")
sheet.SetCellValue(0, 0, "Generated Report")
' Save to file path
workbook.SaveAs("Report.xlsx")
' Save as XLS (legacy format)
workbook.SaveAs("Report.xls")
' Save to MemoryStream for HTTP response
Using ms As New MemoryStream()
workbook.SaveAs(ms)
Dim fileBytes As Byte() = ms.ToArray()
' fileBytes can be returned from an ASP.NET controller action
End Using
ASP.NET Core için, bir tarayıcı indirmesini tetiklemek için denetleyici eyleminizden File(fileBytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Report.xlsx") döndürün. IronXL ASP.NET Excel kılavuzu, tam denetleyici entegrasyon modelini gösterir.
Alternatif .NET Excel kütüphaneleri için, Open XML SDK, birçok kütüphanenin üzerine inşa edildiği açık kaynak temeldir.
Desteklenen Çıktı Formatları
IronXL, herhangi bir ek bağımlılık olmadan aşağıdaki formatlarda kaydeder:
- XLSX -- OpenXML formatı, Excel 2007 ve sonraki sürümleriyle uyumlu
- XLS -- Eski ikili format, Excel 97-2003 ile uyumlu
- CSV -- Virgülle ayrılmış değerler, evrensel olarak desteklenir
- TSV -- Sekmeyle ayrılmış değerler
- JSON -- Yapılandırılmış veri aktarımı
Formatları, SaveAs yolunda dosya uzantısını değiştirerek veya ExcelFileFormat enum değerini kabul eden aşırı yüklenmiş metodu kullanarak değiştirin.
Dışa Aktarılan Excel Dosyasının Doğru Olduğunu Nasıl Doğrularsınız?
Dışa aktarmadan sonra, satır sayılarını doğrulamak, değerleri kontrol etmek veya test projesinde otomatik doğrulama çalıştırmak için IronXL ile dosyayı tekrar okuyabilirsiniz:
using IronXL;
WorkBook loaded = WorkBook.Load("EmployeeData.xlsx");
WorkSheet sheet = loaded.WorkSheets[0];
// Verify row count (header row + data rows)
int totalRows = sheet.Rows.Count();
Console.WriteLine($"Rows in file: {totalRows}");
// Spot-check specific cell values
string header = sheet["A1"].StringValue;
string firstEmployee = sheet["A2"].StringValue;
Console.WriteLine($"Header: {header}, First row: {firstEmployee}");
using IronXL;
WorkBook loaded = WorkBook.Load("EmployeeData.xlsx");
WorkSheet sheet = loaded.WorkSheets[0];
// Verify row count (header row + data rows)
int totalRows = sheet.Rows.Count();
Console.WriteLine($"Rows in file: {totalRows}");
// Spot-check specific cell values
string header = sheet["A1"].StringValue;
string firstEmployee = sheet["A2"].StringValue;
Console.WriteLine($"Header: {header}, First row: {firstEmployee}");
Imports IronXL
Dim loaded As WorkBook = WorkBook.Load("EmployeeData.xlsx")
Dim sheet As WorkSheet = loaded.WorkSheets(0)
' Verify row count (header row + data rows)
Dim totalRows As Integer = sheet.Rows.Count()
Console.WriteLine($"Rows in file: {totalRows}")
' Spot-check specific cell values
Dim header As String = sheet("A1").StringValue
Dim firstEmployee As String = sheet("A2").StringValue
Console.WriteLine($"Header: {header}, First row: {firstEmployee}")
Bu doğrulama şeması, özellikle entegrasyon test paketleri içinde faydalıdır, burada dosyalar dış sistemlere gönderilmeden önce dışa aktarma doğruluğu onaylanmalıdır. IronXL okuma eğitimi, dosya yüklendikten sonra mevcut tüm okuma işlemlerinin tam aralığını gösterir.
.NET'te DataSet ve DataTable kalıpları hakkında daha fazla bilgi için, Microsoft DataSet belgeleri, ADO.NET nesne modelini derinlemesine kapsar.
Sıradaki Adımlarınız Neler?
Artık C#'da DataSet'ten Excel'e dışa aktarma senaryolarının tümü için çalışan desenleriniz var -- tek bir DataTable'dan çoklu sayfa çalışma kitaplarına, veritabanı odaklı dışa aktarımlara, formatlanmış başlıklara ve büyük veri akışına kadar. Hedefinize göre bir sonraki adımın nasıl atılacağı şudur:
- IronXL'yi ücretsiz deneyin -- Ücretsiz bir deneme lisansı ile başlayın ve örnekleri size özel veriler üzerinde çalıştırın, üretime geçmeden önce.
- Tam API referansını okuyun -- IronXL nesne referansı WorkBook, WorkSheet ve hücre aralıklarındaki her yöntemi kapsar.
- İlgili dışa aktarma eğitimlerini keşfedin -- C# DataTable'den Excel'e kılavuz ters iş akışını kapsar -- Excel'i DataTable nesnelerine geri okuma.
- Formatlama seçeneklerini inceleyin -- IronXL hücre formatlama belgeleri, sayı formatları, kenarlıklar, arka plan renkleri ve hizalama seçeneklerini gösterir.
- Lisanslamayı kontrol edin -- Üretim uygulamaları için, IronXL lisans sayfası, Geliştirici, Kurum ve Telif Ücretsiz seçenekler arasında seçim yapmanıza olanak tanır.
- Diğer Iron Software araçlarıyla karşılaştırın -- Eğer projenizin PDF üretimi veya OCR'ye de ihtiyaçı varsa, Iron Software ürün paketi, birden fazla kütüphaneyi birleştirmenizi indirimli fiyatla sağlar.
Burada ele alınan desenlere dayalı olarak, zamanlanmış görev otomasyonu, ASP.NET Core indirme uç noktaları ve tamamen yönetilen C# içinde çok formatlı çıkış hatlarını katmanlayabilirsiniz -- Office yok, COM yok, NuGet paketinin ötesinde çalışma zamanı bağımlılığı yok.
Sıkça Sorulan Sorular
Bir veri kümesini C#'ta Excel'e nasıl aktarabilirim?
IronXL kütüphanesini kullanarak, Excel dosyalarını oluşturmak, düzenlemek ve manipüle etmek için Microsoft Office'e ihtiyaç duymayan bir kod öncelikli API sağlar.
IronXL'yi kullanmak için Microsoft Office kurulu olmalı mı?
Hayır, IronXL, makinede Excel dosyalarını aktarmak veya düzenlemek için Microsoft Office'in kurulmasını gerektirmez.
IronXL ile hangi tür verileri aktarabilirim?
IronXL, DataTables ve DataSets gibi yapılandırılmış verileri Excel dosyalarına aktarmanıza izin verir, ayrıca SqlDataReader ve diğer ADO.NET kaynaklarındaki verileri de içerebilir.
IronXL Excel dosyası oluşturma ve düzenlemeyi destekler mi?
Evet, IronXL, programlı olarak C# ile Excel dosyaları oluşturmak, düzenlemek ve değişiklik yapmak için işlevler sunar.
IronXL, sunucu tarafı ve bulut uygulamaları için uygun mu?
Evet, IronXL, ofis kurulumu gerektirmeden Excel dosyaları oluşturması gereken sunucu tarafı uygulamaları ve bulut işlevleri için idealdir.
DataSets'i aktarmak için IronXL'nin faydaları nelerdir?
IronXL, Microsoft Office gibi harici bağımlılıkları olmadan Excel dosya oluşturma ve manipülasyonunu sağlar, XLSX, XLS ve CSV formatlarını destekler ve tüm .NET hedef çerçevelerle çalışır.
IronXL, ASP.NET Core'da bir Excel indirmesi döndürmek için kullanılabilir mi?
Evet, IronXL çalışma kitaplarını bir MemoryStream'e kaydedebilir ve sonuçtaki bayt dizisi, bir ASP.NET Core denetleyici eyleminden bir dosya indirmesi olarak döndürülebilir.
IronXL büyük veri kümelerini destekliyor mu?
Evet, IronXL, belleği dolu bir DataTable olmadan veri akışını doğrudan SqlDataReader'dan yapabilir, sonuç kümesi büyük olduğunda bellek kullanımını öngörülebilir tutar.
IronXL hangi Excel formatlarını kaydetmek için destekler?
IronXL, XLSX, XLS, CSV, TSV ve JSON formatlarına, ek bir bağımlılık olmadan kaydetmeyi destekler.
Excel'e aktarırken kalın başlıklar gibi biçimlendirmeleri uygulayabilir miyim?
Evet, IronXL, hücre aralıkları için kalın yazı, arka plan renkleri, kenarlıklar, sayı formatları ve hizalamalar için bir Stil API sağlar.




