IronXL Kullanarak Formatlamalı C# Dilinde GridView'den Excel'e Nasıl Aktarılır
Renkleri, yazı tiplerini, değişken satır arka planlarını ve sınırları koruyarak GridView verilerini Excel'e aktarmak, neredeyse her veri odaklı ASP.NET veya Windows Forms uygulamasında karşılaşılan bir gerekliliktir. Geleneksel yaklaşım -- denetimi HTML olarak oluşturmak için HtmlTextWriter ve StringWriter kullanılmak -- Excel'de biçim uyarıları taşıyan dosyalar üretir ve kullanıcılar için sessizce başarısız olur. IronXL, Microsoft Office bağımlılığı olmadan C# içinde tamamen yerel XLSX dosyaları üreterek bunu çözer ve her hücre stilinde tam kontrol sağlar.
Bir .NET Projesine Kütüphane Nasıl Yüklenir?
Herhangi bir aktarım kodu yazmadan önce IronXL'i NuGet'ten yükleyin. Paket Yöneticisi Konsolu'nu açın ve çalıştırın:
Install-Package IronXL.Excel
IronXL, .NET 8, .NET 9 ve .NET 10'un yanı sıra .NET Framework 4.6.2 ve sonraki sürümleri destekler. Kurulumdan sonra, Excel işlemleri gerçekleştiren herhangi bir dosyaya aşağıdaki using yönergelerini ekleyin:
using IronXL;
using IronXL.Styles;
using IronXL;
using IronXL.Styles;
Imports IronXL
Imports IronXL.Styles
Ekstra bir çalışma zamanı veya Office interop gerekmez. Kütüphane, Microsoft Excel, LibreOffice Calc ve Google Sheets'te düzgün açılan yerel XLSX ikili dosyalar yazar.
Windows Forms DataGridView'i Excel'e Hücre Biçimlendirmesiyle Nasıl Aktarırsınız?
Windows Forms uygulamaları web tabanlı GridView yerine DataGridView denetimini kullanır. İhraç şablonu her iki durumda da aynıdır: satırlardan ve hücrelerden değerler çıkarılır, bir IronXL çalışma kitabı oluşturulur, stiller uygulanır, ardından sonuç kaydedilir veya akış olarak iletilir.
En güvenilir yaklaşım, görsel satırları yinelemekten kaçınmak için denetimin DataSource özelliğini bir DataTable ile dökmektir, bu satırlar filtrelenmiş veya sayfalara bölünmüş olabilir:
using IronXL;
using IronXL.Styles;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
DataTable dt = (DataTable)dataGridView1.DataSource;
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;
// Header row -- bold, blue background, white text
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
var cell = sheet.GetCellAt(0, col);
cell.Style.Font.Bold = true;
cell.Style.SetBackgroundColor("#4472C4");
cell.Style.Font.Color = "#FFFFFF";
cell.Style.BottomBorder.Type = BorderType.Thin;
}
// Data rows -- alternating row color
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
string value = dt.Rows[row][col]?.ToString() ?? string.Empty;
sheet.SetCellValue(row + 1, col, value);
var cell = sheet.GetCellAt(row + 1, col);
cell.Style.SetBackgroundColor(row % 2 == 0 ? "#D6DCE5" : "#FFFFFF");
cell.Style.BottomBorder.Type = BorderType.Thin;
}
}
// Save via dialog
using var saveDialog = new SaveFileDialog
{
Filter = "Excel Files|*.xlsx",
FileName = "GridViewExport.xlsx"
};
if (saveDialog.ShowDialog() == DialogResult.OK)
{
workBook.SaveAs(saveDialog.FileName);
MessageBox.Show("Export successful.", "Export",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
using IronXL;
using IronXL.Styles;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
DataTable dt = (DataTable)dataGridView1.DataSource;
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;
// Header row -- bold, blue background, white text
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
var cell = sheet.GetCellAt(0, col);
cell.Style.Font.Bold = true;
cell.Style.SetBackgroundColor("#4472C4");
cell.Style.Font.Color = "#FFFFFF";
cell.Style.BottomBorder.Type = BorderType.Thin;
}
// Data rows -- alternating row color
for (int row = 0; row < dt.Rows.Count; row++)
{
for (int col = 0; col < dt.Columns.Count; col++)
{
string value = dt.Rows[row][col]?.ToString() ?? string.Empty;
sheet.SetCellValue(row + 1, col, value);
var cell = sheet.GetCellAt(row + 1, col);
cell.Style.SetBackgroundColor(row % 2 == 0 ? "#D6DCE5" : "#FFFFFF");
cell.Style.BottomBorder.Type = BorderType.Thin;
}
}
// Save via dialog
using var saveDialog = new SaveFileDialog
{
Filter = "Excel Files|*.xlsx",
FileName = "GridViewExport.xlsx"
};
if (saveDialog.ShowDialog() == DialogResult.OK)
{
workBook.SaveAs(saveDialog.FileName);
MessageBox.Show("Export successful.", "Export",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Imports IronXL
Imports IronXL.Styles
Imports System
Imports System.Data
Imports System.IO
Imports System.Windows.Forms
Dim dt As DataTable = DirectCast(dataGridView1.DataSource, DataTable)
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Header row -- bold, blue background, white text
For col As Integer = 0 To dt.Columns.Count - 1
sheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
Dim cell = sheet.GetCellAt(0, col)
cell.Style.Font.Bold = True
cell.Style.SetBackgroundColor("#4472C4")
cell.Style.Font.Color = "#FFFFFF"
cell.Style.BottomBorder.Type = BorderType.Thin
Next
' Data rows -- alternating row color
For row As Integer = 0 To dt.Rows.Count - 1
For col As Integer = 0 To dt.Columns.Count - 1
Dim value As String = If(dt.Rows(row)(col)?.ToString(), String.Empty)
sheet.SetCellValue(row + 1, col, value)
Dim cell = sheet.GetCellAt(row + 1, col)
cell.Style.SetBackgroundColor(If(row Mod 2 = 0, "#D6DCE5", "#FFFFFF"))
cell.Style.BottomBorder.Type = BorderType.Thin
Next
Next
' Save via dialog
Using saveDialog As New SaveFileDialog With {
.Filter = "Excel Files|*.xlsx",
.FileName = "GridViewExport.xlsx"
}
If saveDialog.ShowDialog() = DialogResult.OK Then
workBook.SaveAs(saveDialog.FileName)
MessageBox.Show("Export successful.", "Export", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Using
WorkBook.Create, XLSX formatında yeni bir bellek içi çalışma kitabı başlatır. DefaultWorkSheet, ilk sayfayı döndürür ve kaydetmeden önce Name özelliği aracılığıyla yeniden adlandırabilirsiniz. SetCellValue, string, tam sayı, double ve DateTime değerlerini kabul eder -- IronXL doğru hücre tipini otomatik olarak seçer.
Değişen satır rengi deseni -- row % 2 == 0 #D6DCE5'yi seçer, aksi halde #FFFFFF -- Excel'e yerleşik olan bantlanmış satır tablo stilini yansıtır. Dizayn sisteminize uygun herhangi bir altı karakterli hex rengini yerine koyabilirsiniz.
Çıktı Resimleri



ASP.NET GridView'i Excel'e Nasıl Aktarır ve Dosyayı Tarayıcıya Nasıl Yayınlarsınız?
Web uygulamaları farklı bir teslimat mekanizması gerektirir. Dosya sistemine yazmak yerine, çalışma kitabını bir MemoryStream içine serileştirin ve doğru başlıklarla HTTP yanıtına yazın, böylece tarayıcı bunu bir dosya indirimi olarak değerlendirir.
Sayfalara bölünmüş GridView için önemli ön hazırlık adımı: sayfalamayı devre dışı bırakın (AllowPaging = false) ve her kaydın -- yalnızca mevcut sayfanın değil -- yakalanabilmesi için veri kaynağını yeniden bağlayın.
using IronXL;
using IronXL.Styles;
using System;
using System.Data;
using System.IO;
using System.Web.UI;
// Disable paging so all rows are captured
GridView1.AllowPaging = false;
GridView1.DataBind();
DataTable dt = (DataTable)GridView1.DataSource;
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;
// Header row
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
var cell = sheet.GetCellAt(0, col);
cell.Style.Font.Bold = true;
cell.Style.SetBackgroundColor("#2E75B6");
cell.Style.Font.Color = "#FFFFFF";
cell.Style.HorizontalAlignment = HorizontalAlignment.Center;
cell.Style.BottomBorder.Type = BorderType.Medium;
}
// 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]?.ToString() ?? string.Empty);
var cell = sheet.GetCellAt(row + 1, col);
cell.Style.SetBackgroundColor(row % 2 == 0 ? "#DEEAF1" : "#FFFFFF");
cell.Style.BottomBorder.Type = BorderType.Thin;
cell.Style.LeftBorder.Type = BorderType.Thin;
cell.Style.RightBorder.Type = BorderType.Thin;
}
}
// Stream to browser
byte[] fileBytes = workBook.ToByteArray();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=GridViewExport.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
using IronXL;
using IronXL.Styles;
using System;
using System.Data;
using System.IO;
using System.Web.UI;
// Disable paging so all rows are captured
GridView1.AllowPaging = false;
GridView1.DataBind();
DataTable dt = (DataTable)GridView1.DataSource;
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;
// Header row
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
var cell = sheet.GetCellAt(0, col);
cell.Style.Font.Bold = true;
cell.Style.SetBackgroundColor("#2E75B6");
cell.Style.Font.Color = "#FFFFFF";
cell.Style.HorizontalAlignment = HorizontalAlignment.Center;
cell.Style.BottomBorder.Type = BorderType.Medium;
}
// 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]?.ToString() ?? string.Empty);
var cell = sheet.GetCellAt(row + 1, col);
cell.Style.SetBackgroundColor(row % 2 == 0 ? "#DEEAF1" : "#FFFFFF");
cell.Style.BottomBorder.Type = BorderType.Thin;
cell.Style.LeftBorder.Type = BorderType.Thin;
cell.Style.RightBorder.Type = BorderType.Thin;
}
}
// Stream to browser
byte[] fileBytes = workBook.ToByteArray();
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=GridViewExport.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
Imports IronXL
Imports IronXL.Styles
Imports System
Imports System.Data
Imports System.IO
Imports System.Web.UI
' Disable paging so all rows are captured
GridView1.AllowPaging = False
GridView1.DataBind()
Dim dt As DataTable = CType(GridView1.DataSource, DataTable)
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' Header row
For col As Integer = 0 To dt.Columns.Count - 1
sheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
Dim cell = sheet.GetCellAt(0, col)
cell.Style.Font.Bold = True
cell.Style.SetBackgroundColor("#2E75B6")
cell.Style.Font.Color = "#FFFFFF"
cell.Style.HorizontalAlignment = HorizontalAlignment.Center
cell.Style.BottomBorder.Type = BorderType.Medium
Next
' 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, If(dt.Rows(row)(col)?.ToString(), String.Empty))
Dim cell = sheet.GetCellAt(row + 1, col)
cell.Style.SetBackgroundColor(If(row Mod 2 = 0, "#DEEAF1", "#FFFFFF"))
cell.Style.BottomBorder.Type = BorderType.Thin
cell.Style.LeftBorder.Type = BorderType.Thin
cell.Style.RightBorder.Type = BorderType.Thin
Next
Next
' Stream to browser
Dim fileBytes As Byte() = workBook.ToByteArray()
Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AddHeader("content-disposition", "attachment; filename=GridViewExport.xlsx")
Response.BinaryWrite(fileBytes)
Response.End()
Response.AddHeader ile content-disposition: attachment modern tarayıcıların tümünde bir dosya indirme diyalogu zorlar. MIME türü application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, XLSX dosyaları için kayıtlı türdür ve tarayıcının ikili içeriği satır içi göstermeye çalışmasını önler.
ASP.NET Core uygulamaları için bir denetleyici işleminde Response.BinaryWrite yerine File(fileBytes, contentType, fileName) kullanın -- çalışma kitabı oluşturma mantığı aynıdır.
Hücre Değerlerine Göre Koşullu Biçimlendirme Nasıl Uygulanır?
Koşullu biçimlendirme, belirli kriterleri karşılayan hücreleri vurgular -- örneğin, gecikmiş tarihleri kırmızıyla işaretleme veya eşik altında kalan değerleri turuncuyla işaretleme. IronXL, çalışma kitabı yapımı sırasında hücre düzeyinde koşullu biçimlendirme uygular:
// Assume "DueDate" is column index 3 and "Amount" is column index 4
DateTime today = DateTime.Today;
for (int row = 0; row < dt.Rows.Count; row++)
{
// Highlight past-due dates
if (dt.Columns.Contains("DueDate") && dt.Rows[row]["DueDate"] != DBNull.Value)
{
DateTime dueDate = Convert.ToDateTime(dt.Rows[row]["DueDate"]);
var dueDateCell = sheet.GetCellAt(row + 1, 3);
if (dueDate < today)
{
dueDateCell.Style.SetBackgroundColor("#FF0000");
dueDateCell.Style.Font.Color = "#FFFFFF";
dueDateCell.Style.Font.Bold = true;
}
}
// Highlight amounts below threshold
if (dt.Columns.Contains("Amount") && dt.Rows[row]["Amount"] != DBNull.Value)
{
decimal amount = Convert.ToDecimal(dt.Rows[row]["Amount"]);
var amountCell = sheet.GetCellAt(row + 1, 4);
if (amount < 100m)
{
amountCell.Style.SetBackgroundColor("#FFC000");
}
}
}
// Assume "DueDate" is column index 3 and "Amount" is column index 4
DateTime today = DateTime.Today;
for (int row = 0; row < dt.Rows.Count; row++)
{
// Highlight past-due dates
if (dt.Columns.Contains("DueDate") && dt.Rows[row]["DueDate"] != DBNull.Value)
{
DateTime dueDate = Convert.ToDateTime(dt.Rows[row]["DueDate"]);
var dueDateCell = sheet.GetCellAt(row + 1, 3);
if (dueDate < today)
{
dueDateCell.Style.SetBackgroundColor("#FF0000");
dueDateCell.Style.Font.Color = "#FFFFFF";
dueDateCell.Style.Font.Bold = true;
}
}
// Highlight amounts below threshold
if (dt.Columns.Contains("Amount") && dt.Rows[row]["Amount"] != DBNull.Value)
{
decimal amount = Convert.ToDecimal(dt.Rows[row]["Amount"]);
var amountCell = sheet.GetCellAt(row + 1, 4);
if (amount < 100m)
{
amountCell.Style.SetBackgroundColor("#FFC000");
}
}
}
Imports System
' Assume "DueDate" is column index 3 and "Amount" is column index 4
Dim today As DateTime = DateTime.Today
For row As Integer = 0 To dt.Rows.Count - 1
' Highlight past-due dates
If dt.Columns.Contains("DueDate") AndAlso dt.Rows(row)("DueDate") IsNot DBNull.Value Then
Dim dueDate As DateTime = Convert.ToDateTime(dt.Rows(row)("DueDate"))
Dim dueDateCell = sheet.GetCellAt(row + 1, 3)
If dueDate < today Then
dueDateCell.Style.SetBackgroundColor("#FF0000")
dueDateCell.Style.Font.Color = "#FFFFFF"
dueDateCell.Style.Font.Bold = True
End If
End If
' Highlight amounts below threshold
If dt.Columns.Contains("Amount") AndAlso dt.Rows(row)("Amount") IsNot DBNull.Value Then
Dim amount As Decimal = Convert.ToDecimal(dt.Rows(row)("Amount"))
Dim amountCell = sheet.GetCellAt(row + 1, 4)
If amount < 100D Then
amountCell.Style.SetBackgroundColor("#FFC000")
End If
End If
Next row
Bu desen, raporlama gereksinimlerinizin gerektirdiği kadar çok koşullu kontrol ekleme kapasitesine sahiptir. IronXL hücresel bazda çalıştığından, koşullu biçimlendirmeyi baz satır stilinin ardından koşullu stili uygulayarak değişken satır rengi mantığı ile karıştırabilirsiniz.
Sütun Genişliklerini Nasıl Ayarlarsınız ve Başlık Satırını Nasıl Dondurursunuz?
Profesyonelce biçimlendirilmiş bir Excel aktarma, uygun sütun genişliklerini ve kullanıcıların büyük veri kümelerini kaydırırken sütun adlarının görünür kalmasını sağlayan donmuş bir başlık satırını içerir.
IronXL, sütun genişliğini WorkSheet sütun erişici aracılığıyla ve başlık dondurmayı FreezeRows yöntemi aracılığıyla ortaya koyar:
// Auto-size columns 0 through the last column index
for (int col = 0; col < dt.Columns.Count; col++)
{
// Set column width in character units (1 unit ≈ one default character width)
sheet.SetColumnWidth(col, 20);
}
// Freeze the first row (index 0) so the header stays visible while scrolling
sheet.FreezeRows(1);
// Optionally set row height for the header (in points)
sheet.SetRowHeight(0, 20);
// Auto-size columns 0 through the last column index
for (int col = 0; col < dt.Columns.Count; col++)
{
// Set column width in character units (1 unit ≈ one default character width)
sheet.SetColumnWidth(col, 20);
}
// Freeze the first row (index 0) so the header stays visible while scrolling
sheet.FreezeRows(1);
// Optionally set row height for the header (in points)
sheet.SetRowHeight(0, 20);
' Auto-size columns 0 through the last column index
For col As Integer = 0 To dt.Columns.Count - 1
' Set column width in character units (1 unit ≈ one default character width)
sheet.SetColumnWidth(col, 20)
Next
' Freeze the first row (index 0) so the header stays visible while scrolling
sheet.FreezeRows(1)
' Optionally set row height for the header (in points)
sheet.SetRowHeight(0, 20)
Üretim kullanımı için, her sütunda maksimum karakter sayısına dayalı genişlik hesaplamayı düşünün. DataTable sütun değerlerini yineleyin, dizi uzunluğunu ölçün ve seçilen yazı tipi boyutuna uygun bir karakter genişliği faktörü ile çarpın.
Dizayn sisteminizden bağımsız, satır bantlaması mantığından ayrı olarak daha ince bir stillendirme yaklaşımı için C# kullanarak Excel hücrelerine arka plan rengini uygulayabilirsiniz.
GridView Kontrolü Olmadan DataTable'ı Excel'e Nasıl Aktarırsınız?
Birçok .NET uygulaması, hizmet çağrıları veya veritabanı sorguları aracılığıyla veri doldurur ve bunu bir DataTable içinde tutar, ancak hiçbir zaman bir kullanıcı arayüzü denetimine bağlamaz. Bir DataTable'i hiç bir GridView başlatmadan doğrudan Excel'e aktarabilirsiniz.
Bu, arka plan işleri, planlanmış raporlar ve sunucuda Excel dosyaları üretmesi gereken API uç noktaları için en verimli yoldur:
using IronXL;
using IronXL.Styles;
using System.Data;
public static byte[] DataTableToExcelBytes(DataTable dt, string sheetName = "Report")
{
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.CreateWorkSheet(sheetName);
// Header
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
var cell = sheet.GetCellAt(0, col);
cell.Style.Font.Bold = true;
cell.Style.SetBackgroundColor("#4472C4");
cell.Style.Font.Color = "#FFFFFF";
}
// Data
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]?.ToString() ?? string.Empty);
}
}
return workBook.ToByteArray();
}
using IronXL;
using IronXL.Styles;
using System.Data;
public static byte[] DataTableToExcelBytes(DataTable dt, string sheetName = "Report")
{
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.CreateWorkSheet(sheetName);
// Header
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
var cell = sheet.GetCellAt(0, col);
cell.Style.Font.Bold = true;
cell.Style.SetBackgroundColor("#4472C4");
cell.Style.Font.Color = "#FFFFFF";
}
// Data
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]?.ToString() ?? string.Empty);
}
}
return workBook.ToByteArray();
}
Imports IronXL
Imports IronXL.Styles
Imports System.Data
Public Shared Function DataTableToExcelBytes(dt As DataTable, Optional sheetName As String = "Report") As Byte()
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workBook.CreateWorkSheet(sheetName)
' Header
For col As Integer = 0 To dt.Columns.Count - 1
sheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
Dim cell = sheet.GetCellAt(0, col)
cell.Style.Font.Bold = True
cell.Style.SetBackgroundColor("#4472C4")
cell.Style.Font.Color = "#FFFFFF"
Next
' Data
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, If(dt.Rows(row)(col)?.ToString(), String.Empty))
Next
Next
Return workBook.ToByteArray()
End Function
Bu yöntem, diske yazabileceğiniz, bir API uç noktasından akış yapabileceğiniz, bir e-postaya ekleyebileceğiniz veya bellekte önbelleğe alabileceğiniz bir byte[] döndürür. İlgili teknikler için, bir DataTable'ı Excel'e aktarma kılavuzu ve bir DataTable'ı Excel'e en hızlı şekilde aktarma öğreticisini inceleyin.
Büyük Veri Kümeleri ve Performansı Nasıl İdare Edersiniz?
On binlerce satırı Excel'e aktarmak, bellek tahsisine dikkat çekmeyi gerektirir. Büyük bir ızgaradaki her hücre için yeni bir hücre stili nesnesi oluşturmak en yaygın performans darboğazıdır. Mümkünse stil tanımlarını yeniden kullanın, bireysel hücreler yerine aralık nesnelerine stiller ayarlayarak:
| Veri Kümesi Büyüklüğü | Önerilen Yaklaşım | Ana Dikkat |
|---|---|---|
| 5.000 satıra kadar | Hücre bazında stil döngüsü | Basit kod, göz ardı edilebilir yük |
| 5.000 -- 50.000 satır | Aralık düzeyinde stil uygulaması | Nesne tahsislerini önemli ölçüde azaltır |
| 50.000+ satır | DataTable doğrudan aktarma, minimal stil | Hücre başına işlemleri minimize etmek; mevcutsa akış kullanın |
Sayfalara bölünmüş GridView için her zaman AllowPaging = false ayarlayın ve ihraç etmeden önce yeniden bağlayın. Sayfalama, kontrolün görünür satırlarının sayısını sınırlar, bu yüzden sayfalı aktarım yalnızca mevcut sayfayı değil, tüm veri kümesini yakalar -- sıklıkla eksik aktarma hatalarının bir kaynağıdır.
Güçlü türde koleksiyonlarla değil, güçlü türde olmayan DataTable satırlarla çalışan desenler için C#'de bir nesne listesini Excel'e ihraç etme kılavuzunu da inceleyebilirsiniz.
ASP.NET Core veya Blazor'da Bir GridView Nasıl Aktarılır?
ASP.NET Core ve Blazor uygulamalarının Web Forms GridView denetimi yoktur, ancak temeldeki veri ihraç zorluğu aynıdır: bir nesne koleksiyonunu veya bir DataTable alın, stilli bir çalışma kitabı oluşturun ve bir dosya teslim edin. Çalışma kitabı oluşturma kodu aynıdır; sadece teslimat mekanizması değişir.
Bir Blazor uygulamasında, bir dosya indirme işlemini JavaScript interop yoluyla başlatın:
// In a Blazor component or service
using IronXL;
using System.Data;
using Microsoft.JSInterop;
public async Task ExportToExcelAsync(DataTable dt, IJSRuntime js)
{
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
var cell = sheet.GetCellAt(0, col);
cell.Style.Font.Bold = true;
cell.Style.SetBackgroundColor("#4472C4");
cell.Style.Font.Color = "#FFFFFF";
}
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]?.ToString() ?? string.Empty);
}
}
byte[] fileBytes = workBook.ToByteArray();
string base64 = Convert.ToBase64String(fileBytes);
await js.InvokeVoidAsync("downloadFileFromBase64", base64, "GridViewExport.xlsx",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}
// In a Blazor component or service
using IronXL;
using System.Data;
using Microsoft.JSInterop;
public async Task ExportToExcelAsync(DataTable dt, IJSRuntime js)
{
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet sheet = workBook.DefaultWorkSheet;
for (int col = 0; col < dt.Columns.Count; col++)
{
sheet.SetCellValue(0, col, dt.Columns[col].ColumnName);
var cell = sheet.GetCellAt(0, col);
cell.Style.Font.Bold = true;
cell.Style.SetBackgroundColor("#4472C4");
cell.Style.Font.Color = "#FFFFFF";
}
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]?.ToString() ?? string.Empty);
}
}
byte[] fileBytes = workBook.ToByteArray();
string base64 = Convert.ToBase64String(fileBytes);
await js.InvokeVoidAsync("downloadFileFromBase64", base64, "GridViewExport.xlsx",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}
Imports IronXL
Imports System.Data
Imports Microsoft.JSInterop
Public Async Function ExportToExcelAsync(dt As DataTable, js As IJSRuntime) As Task
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
For col As Integer = 0 To dt.Columns.Count - 1
sheet.SetCellValue(0, col, dt.Columns(col).ColumnName)
Dim cell = sheet.GetCellAt(0, col)
cell.Style.Font.Bold = True
cell.Style.SetBackgroundColor("#4472C4")
cell.Style.Font.Color = "#FFFFFF"
Next
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, If(dt.Rows(row)(col)?.ToString(), String.Empty))
Next
Next
Dim fileBytes As Byte() = workBook.ToByteArray()
Dim base64 As String = Convert.ToBase64String(fileBytes)
Await js.InvokeVoidAsync("downloadFileFromBase64", base64, "GridViewExport.xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
End Function
Blazor indirme deseniyle ilgili tam yürüyüş Blazor'u Excel'e aktarma öğreticisinde mevcuttur. Bir ASP.NET Core denetleyici yaklaşıma ilişkin, ASP.NET Core Excel'e aktarma öğreticisini inceleyin.
Yazı Tipi Stili ve Kenarlık Seçenekleri
IronXL, her hücredeki Style nesnesi aracılığıyla ayrıntılı yazı tipi ve kenarlık denetimlerini ortaya koyar. C#'da Excel yazı tipleri için tam stil yelpazesi kalın, italik, altı çizili, boyut ve renk içerir. BorderType aracılığıyla kullanılabilir kenarlık türleri ince, orta, kalın, kesikli, noktalı, çift ve birkaç ince çizgi çeşidini kapsar.
Birleştirilmiş başlık satırları veya özet alt bilgileri için IronXL, C#'da Excel hücrelerini birleştirmeyi de destekler -- veritabanı tablonuzun üzerindeki birden fazla sütunu kapsayan tek bir başlık hücresi istediğinizde kullanışlıdır.
Verileri doldurduktan sonra sütun genişliklerini otomatik olarak ayarlamak için önerilen yaklaşım için C# kullanarak Excel hücrelerini otomatik ayarlama kılavuzuna bakın.
Neden Yerli Bir Excel Kütüphanesi, HtmlTextWriter'dan Daha Temiz Aktarımlar Üretir?
Geleneksel ASP.NET ihraç tekniği -- VerifyRenderingInServerForm geçersiz kılma, bir StringWriter ve HtmlTextWriter oluşturma ve oluşturulan denetimi yanıt olarak yazma -- .xls uzantılı bir HTML belgesi üretir. Microsoft Excel, bu tür dosyaları uyumluluk uyarısıyla açar çünkü dosya gerçekten bir Excel ikili veya OOXML formatında değildir. Stiller, Excel'in kısmen yorumladığı satır içi CSS ile sınırlıdır. Koşullu biçimlendirme imkansızdır. Windows dışındaki platformlarda veya LibreOffice kullanan kullanıcılar, bozuk çıktı görür.
IronXL, Open XML Elektronik Tablosu formatını (OOXML) doğrudan yazar. Sonuç, Excel'in kendisinin oluşturduğuyla özdeş olan -- Excel, LibreOffice, Google Sheets ve macOS'ta Numbers'ta uyarı vermeden açılan -- düzgün bir .xlsx dosyasıdır. Biçimlendirme, HTML nitelikleri olarak değil, elektronik tablo stilleri olarak kodlanır, bu nedenle dönüşlere ve çapraz platform görüntülemeye dayanır.
| Yöntem | Dosya Formatı | Format Uyarıları | Tam Stil Desteği | Ofis Gerekli |
|---|---|---|---|---|
| HtmlTextWriter + StringWriter | XLS olarak maskelenmiş HTML | Evet | Hayır | Hayır |
| Office Interop (COM) | Yerel XLS/XLSX | Hayır | Evet | Evet |
| IronXL | Yerel XLSX/XLS | Hayır | Evet | Hayır |
IronXL'in üretmiş olduğu temel formatı açıklayan Microsoft'un Open XML SDK dokümantasyonuna bakın. ECMA International tarafından sürdürülen OOXML spesifikasyonu, çapraz uygulama uyumluluğunu garanti eden standardı tanımlar. Yukarıdaki aktarma desenlerinin okuduğu kontrol modelini tanımlayan Microsoft Dokümanlarında ASP.NET GridView kontrol dokümantasyonu bakın.
Sonraki Adımlarınız Neler?
IronXL kullanarak GridView ve DataGridView verilerini doğru biçimlendirilmiş XLSX dosyalarına aktarmak için gereken desenlere artık sahipsiniz -- Windows Forms, ASP.NET Web Forms, ASP.NET Core ve Blazor teslimat modellerini kapsamaktadır.
Daha ileri gitmek için:
- Kendi verileriniz üzerinde tam biçimlendirme ve dışa aktarma yeteneklerini test etmek için IronXL'in ücretsiz deneme sürümüne başlayın.
- Pivot tablolar, grafikler ve veri doğrulama dahil olmak üzere tam API referansı için IronXL dokümantasyonunu gözden geçirin.
- Hesaplanmış özetlerle ve grafiklerle yukarıdaki aktarma desenleri birleştirerek C#'da Excel raporları oluşturma üzerine keşif yapın.
- Uygulamanız yüklenmiş elektronik tabloları da tüketmesi gerektiğinde karşılaştırmalı içe aktarma iş akışı için, C#'da Excel dosyalarını okumana bakın.
- XLSX yanında CSV tabanlı dışa aktarımlar için, C# CSV'ye aktarım öğreticisini inceleyin.
- Sütun başlıklarını ilk satır olarak kullanan bir DataGridView'den verileri dışarı aktarıyorsanız, sütun başlıklı DataGridView'den Excel aktarma rehberine bakın.
Sıkça Sorulan Sorular
C#'da GridView verilerini Excel'e nasıl aktarabilirim?
IronXL kütüphanesini kullanarak C#'da GridView verilerini Excel'e aktarabilirsiniz. Veri aktarmanızı programatik olarak kolayca yapmanızı sağlar, biçimlendirme ve stiller dâhil.
Neden GridView verilerini aktarmak için IronXL kullanmalıyım?
IronXL API'sı ile GridView verilerini aktarmayı basit hale getirir, biçimlendirmeyi korumanıza ve stilleri zahmetsizce uygulamanıza olanak tanır, bu da geleneksel yöntemlerde zorlu olabilir.
IronXL, GridView'ı Excel'e aktarırken biçimlendirmeyi destekliyor mu?
Evet, IronXL, yazı tipleri, renkler ve hücre stilleri dâhil çeşitli biçimlendirme seçeneklerini destekler, böylece ihraç ettiğiniz Excel dosyalarının profesyonel görünmesini sağlar ve tasarımı korur.
GridView verilerinden oluşturulan Excel dosyalarının görünümünü özelleştirebilir miyim?
IronXL, Excel dosyaları için hücre stillerini, yazı tiplerini, renkleri ve daha fazlasını, GridView üzerinden ihraç ederken özel gereksinimlerinize göre ayarlamanıza olanak tanıyan geniş bir özelleştirme seçenekleri sunar.
IronXL kullanarak büyük GridView veri setlerini Excel'e aktarmak mümkün mü?
IronXL, geniş GridView verilerini Excel'e herhangi bir performans sorunu olmadan aktarabilmenizi sağlayarak büyük veri setlerini etkin bir şekilde yönetebilir.
IronXL kullanarak GridView verilerini Excel'e aktarmanın diğer yöntemlerden faydaları nelerdir?
IronXL, GridView verilerini aktarma konusunda daha sade ve esnek bir yaklaşım sunar, biçimlendirme, özelleştirme ve büyük veri setleri için sağlam destek sağlayarak birçok diğer yönteme göre üstünlük sağlar.
GridView'ı Excel'e aktarmak için veri bütünlüğünü nasıl korurum?
IronXL, GridView'den Excel'e aktarım sürecinde veri türlerini ve formatlarını doğru bir şekilde dönüştürerek ve koruyarak veri bütünlüğünü garanti eder.
IronXL, karmaşık yapıya sahip GridView kontrollerinden veri aktarmak için kullanılabilir mi?
Evet, IronXL, karmaşık yapıya sahip GridView kontrollerinden veri yerine iyi ve düzenli bir şekilde aktararak, Excel dosyasındaki hiyerarşiyi ve biçimlendirmeyi koruyarak etkin bir şekilde çalışabilir.
IronXL, GridView verilerini hangi dosya formatlarına aktarabilir?
IronXL, öncelikle Excel biçimlerine, örneğin XLSX dâhil veri aktarır, ancak CSV gibi diğer formatları da destekler, ihtiyaçlarınıza göre esneklik sağlar.
IronXL ile koşullu biçimlendirme ile GridView'ı ihraç etmeye destek var mı?
IronXL, GridView verilerini Excel'e aktarırken hücre değerlerine dayalı olarak dinamik olarak ayarlanan kurallar ve stil belirlemenize olanak tanıyan koşullu biçimlendirmeyi destekler.




