Altbilgi içeriğine atla
IRONXL KULLANARAK

IronXL Kullanarak Formatlamalı C# Dilinde GridView'den Excel'e Nasıl Aktarılır

GridView verilerini Excel'e aktarma, renkleri, yazı tiplerini, alternatif satır arka planlarını ve kenarlıkları korurken neredeyse her veri odaklı ASP.NET veya Windows Forms uygulamasında ortaya çıkan bir gerekliliktir. Geleneksel yaklasim -- kontrolu HTML olarak rendere etmek icin HtmlTextWriter ve StringWriter kullanmak -- Excel'de format uyari mesajlari iceren ve kullanicilar icin sessizce basarisiz olan dosyalar oluşturur. IronXL, bunun yerine Microsoft Office bağımlılığı olmadan tamamen C# dilinde yerel XLSX dosyaları oluşturarak, her hücre stilinde tam kontrol sağlar.

Bir .NET Projesinde Kütüphane Nasıl Kurulur?

Herhangi bir ihracat kodu yazmadan önce NuGet'den IronXL yükleyin. Paket Yöneticisi Konsolunu açın ve çalıştırın:

Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
SHELL

IronXL, .NET 8, .NET 9 ve .NET 10'u, ayrıca .NET Framework 4.6.2 ve sonrasını destekler. Kurulumdan sonra, Excel işlemlerini yurutecen herhangi bir dosyaya asagidaki using yonlendirmelerini ekleyin:

using IronXL;
using IronXl.Styles;
using IronXL;
using IronXl.Styles;
Imports IronXL
Imports IronXl.Styles
$vbLabelText   $csharpLabel

Ek bir çalışma zamanı veya Office interop gerekmez. Kütüphane, Microsoft Excel, LibreOffice Calc ve Google Sheets'te sorunsuz açılan yerel XLSX ikili dosyalarını yazar.

Cell Biçimlendirme ile Windows Forms DataGridView'ı Excel'e Nasıl Aktarabilirsiniz?

Windows Forms uygulamalari, web tabanli GridView yerine DataGridView kontrolunu kullanir. Ihracat deseni her iki durumda da aynidir: sira ve hucrelerden degerler cikarin, bir IronXL defteri oluşturun, stiller uygulayin, sonra sonucu kaydedin veya yayin.

En guvenilir yaklasim, kontrolun DataSource ozelligini bir DataTable olarak aktarmak ve filtrelenmis veya sayfalara ayrilmis olabilecek gorunur sirtlari yinelememekten gecer:

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

WorkBook.Create yeni bir hafiza ici defteri XLSX formatinda başlatir. DefaultWorkSheet ilk sayfayi dondurur, bunu kaydetmeden once Name ozelligi araciligiyla yeniden adlandirabilirsiniz. SetCellValue stringleri, tam sayilari, double'lari ve DateTime degerlerini kabul eder -- IronXL dogru hucre tipini otomatik olarak secer.

Degisen sira renk deseni -- row % 2 == 0 #D6DCE5 secer, aksi halde #FFFFFF -- Excel'de yerlesik olan seritli sira tablo stilini yansitir. Uygulamanızın tasarım sistemine uyan herhangi bir altı karakterli hex rengi yerine koyabilirsiniz.

Çıkış Resimleri

GridView'i C# Stilleriyle Excel'e Aktarin IronXL Kullanarak: Resim 1 - GridView Ciktisi

GridView'i C# Stilleriyle Excel'e Aktarin IronXL Kullanarak: Resim 2 - Excel Ciktisi

GridView'i C# Stilleriyle Excel'e Aktarin IronXL Kullanarak: Resim 3 - Mesaj Ciktisi

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 teslim mekanizması gerektirir. Dosya sistemine yazmak yerine, calisma kitabini bir MemoryStream olarak serilize eder ve dogru basliklarla HTTP yanitina yazarak tarayici bunu bir dosya indirimi olarak gorur.

Sayfalandirilmis GridView'ler icin onemli oncalisma adimi: sayfalama devre disi birakin (AllowPaging = false) ve her kaydin, sadece mevcut sayfanin değil, yakalanmasi icin veri kaynagini yeninden baglayin.

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 = DirectCast(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()
$vbLabelText   $csharpLabel

Response.AddHeader ile content-disposition: attachment tüm modern tarayicilarda bir dosya-indirme duvari zorlar. MIME tipi application/vnd.openxmlformats-officedocument.spreadsheetml.sheet XLSX dosyalari icin kayitli tiptir ve tarayicinin ikili icerigi satir icinde gösterme tesebbusunu onler.

ASP.NET Core uygulamalari icin Response.BinaryWrite yerine File(fileBytes, contentType, fileName) yerine koyun -- calisma kitabi oluşturma mantigi aynidir.

Hücre Değerlerine Dayalı Koşullu Biçimlendirmeyi Nasıl Uygularsınız?

Koşullu biçimlendirme, belirli kriterleri karşılayan hücreleri vurgular -- örneğin, geciken tarihleri kırmızı renkte işaretlemek veya bir eşiğin altındaki değerleri turuncu renkte işaretlemek gibi. IronXL, çalışma kitabı oluşturma sırasında hücre seviyesinde koşullu biçimlendirmeyi 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
$vbLabelText   $csharpLabel

Bu desen oluşturucudur -- raporlama gereksinimlerinizin talep ettiği kadar çok koşullu kontrol ekleyin. IronXL hücre bazında çalıştığı için, temel satır stilinin ardından koşullu stili uygulayarak koşullu biçimlendirmeyi alternatif satır rengi mantığı ile birleştirebilirsiniz.

Sütun Genişliklerini Nasıl Ayarlar ve Başlık Satırını Nasıl Dondurursunuz?

Profesyonelce biçimlendirilmiş bir Excel dışa aktarımı, uygun sütun genişliklerini ve kullanıcılar büyük veri setleri arasında gezindiğinde sütun adlarının görünür kalması için dondurulmuş bir başlık satırını içerir.

IronXL kolon genisligini WorkSheet kolon erişimi ve baslik dondurma yoluyla FreezeRows metodu araciligiyla aciga cikarir:

// 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)
$vbLabelText   $csharpLabel

Üretim kullanımı için, sabit bir değer kullanmak yerine her sütundaki maksimum karakter sayısına dayalı olarak genişliği hesaplamayı düşünün. DataTable kolon degerlerini yineleyin, string uzunlugunu olcun ve secilen yazi tipi boyutuna uygun bir karakter-genislik carpani ile carpin.

Excel hücrelerine arka plan rengi uygulayarak satır bantlama mantığından bağımsız olarak daha ince bir stil yaklaşımı elde edebilirsiniz.

GridView Kontrolü Olmadan Bir DataTable'ı Excel'e Nasıl Aktarırsınız?

Çok sayida .NET uygulamasi servis cagri ya da veri tabani sorgulari araciligiyla verileri doldurur ve bunu kac zamani icin bir DataTable'da bagli bir UI kontrolu olmadan tutar. DataTable'u hic GridView oluşturmadan dogrudan Excel'e ihrac edebilirsiniz.

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

Bu yöntem, diske yazabileceginiz, bir API noktasindan yayinlayabileceginiz, bir e-postaya ekleyebileceginiz veya hafizada cacheleyebileceginiz bir byte[] dondurur. DataTable'ı Excel'e dışa aktarma kılavuzuna ve bir DataTable'ı Excel'e ihrac etmenin en hızlı yolu eğiticisine bakın.

Nasıl Büyük Veri Setlerini ve Performansı Yönetirsiniz?

On binlerce satırı Excel'e aktarmak hafıza tahsisine dikkat gerektirir. Büyük bir ızgarada her hücre için yeni bir hücre stil nesnesi oluşturmak en yaygın performans darboğazıdır. Mümkün olan yerlerde stil tanımlarını yeniden kullanarak, bireysel hücreler yerine aralık nesnelerinde stiller ayarlayın:

IronXL Veri Seti Boyutuna Göre İhracat Yaklaşımları
Veri Seti Boyutu Önerilen Yaklaşım Ana Husus
5.000 satıra kadar Hücre düzeyinde stil döngüsü Basit kod, ihmal edilebilir ek yük
5.000 -- 50.000 satır Aralık düzeyi stil uygulaması Nesne tahsisatlarını önemli ölçüde azaltır
50.000+ satır DataTable doğrudan ihracat, minimal stil Hücre bazlı işlemleri en aza indirin; uygun olduğunda akışı kullanın

Sayfalandirilmis GridView'ler icin, daima AllowPaging = false ayarlayin ve ihrac etmeden once yeniden baglayin. Sayfalandırma, kontroldeki görünür satırların sayısını sınırlar, bu yüzden sayfalama yapılmış bir ihracat yalnızca mevcut sayfayı yakalar, tüm veri seti yerine -- eksik ihracat hatalarının yaygın bir kaynağı.

C#'da bir nesne listesini Excel'e aktarma rehberini, tanimsiz DataTable sira yerine guclu tip koleksiyonlar ile calisan desenler icin de inceleyebilirsiniz.

ASP.NET Core veya Blazor'daki bir GridView'i Nasıl İhraç Edersiniz?

ASP.NET Core ve Blazor uygulamalarinda bir Web Forms GridView kontrolu yoktur, ancak temel veri-ihrac zorlugu aynidir: nesne koleksiyonunu veya bir DataTable'u alin, bir stilize defter oluşturun ve bir dosya teslim edin. Defter-oluşturma kodu aynidir; sadece teslim mekanizması değişir.

Blazor uygulamasında, JavaScript interop yoluyla bir dosya indirmesini tetikleyin:

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

Blazor'un Excel'e ihracat eğiticisinde Blazor indirme deseninin tam yürüyüşü bulunmaktadır. ASP.NET Core kontrolcüsü yaklaşımı için, ASP.NET Core Excel ihraç etme eğiticisine bakın.

Yazı Tipi Stilleme ve Kenar Seçenekleri

IronXL, her hucredeki Style nesnesi araciligiyla ayrintili yazi tipi ve kenarlik kontrollerini aciga cikarir. C#'da Excel yazı tipi stilleri tam aralığı kalın, italik, altı çizili, boyut ve renk içerir. BorderType uzerinden mevcut olan kenarlik tiplari ince, orta, kalin, kesik, nokta, cift ve birkac hair-line varyantini kapsar.

C# kullanarak Excel'de hücreleri birleştirmeyi destekleyen IronXL, birleşik başlık satırları veya özet altbilgileri için yararlıdır -- veri tablonuzun üstünde birden fazla sütuna yayılan tek bir başlık hücresi istediğinizde.

Veri doldurduktan sonra sütun genişliklerini otomatik olarak uyarlamak için, uygun yaklaşıma ilişkin C# kullanarak Excel'deki hücreleri otomatik olarak uydurma kılavuzuna bakın.

Bir Yerel Excel Kütüphanesi Neden HtmlTextWriter'dan Daha Temiz İhracatlar Üretir?

Geleneksel ASP.NET ihrac teknigi -- VerifyRenderingInServerForm ustunu yazarak, bir StringWriter ve HtmlTextWriter oluşturarak ve render edilmiş kontrolu yanita yazarak -- bir .xls uzantiliginda HTML belgesi oluşturur. Microsoft Excel, bu tür dosyaları gerçek Excel ikili veya OOXML formatında olmadığı için uyumluluk uyarısı ile açar. Stiller, Excel'in kısmen yorumladığı satır içi CSS ile sınırlıdır. Koşullu biçimlendirme imkansızdır. LibreOffice kullanarak veya olmayan Windows platformlarında kullanıcılar daha kötü çıktı görür.

IronXL, Açık XML Elektronik Tablolar formatını (OOXML) doğrudan yazar. Sonuc, dogru bir .xlsx dosyasi olur -- Excel'in kendisinin yarattigiyle ayni -- ve Excel, LibreOffice, Google Sheets ve macOS'ta Numbers'ta ihtar olmadan acar. Biçimlendirme, HTML öznitelikleri olarak kodlanmaz, bu yüzden çapraz platform görünürlüğü ve yuvarlak gezilerde hayatta kalır.

ASP.NET GridView için İhracat Yöntemlerinin Karşılaştırması
Yöntem Dosya Biçimi Biçim Uyarıları Tam Stil Desteği Ofis Gerekli
HtmlTextWriter + StringWriter XLS gibi davranan 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

Açık XML SDK üzerine Microsoft'un resmi belgesi, IronXL tarafından üretilen temel formatı açıklar. ECMA International tarafından sürdürülen OOXML spesifikasyonu, uygulamalar arası uyumluluğu garanti eden standardı tanımlar. Microsoft Docs'taki ASP.NET GridView kontrol belgesi, yukarıda belirtilen ihracat desenlerinin okuduğu kontrol modelini açıklar.

Sıradaki Adımlarınız Neler?

Artık Windows Forms, ASP.NET Web Forms, ASP.NET Core ve Blazor teslimat modellerini kapsayan, GridView ve DataGridView verilerini doğru biçimlendirilmiş XLSX dosyalarına aktarmak için gereken desenlere sahipsiniz.

Daha ileri gitmek için:

Sıkça Sorulan Sorular

GridView verilerini C#'ta Excel'e nasıl dışa aktarabilirim?

IronXL kütüphanesini kullanarak GridView verilerini C#'ta Excel'e dışa aktarabilirsiniz. Bu, Excel dosyalarını programlı olarak oluşturmanıza ve verileri biçimlendirme ve stilleri dahil kolaylıkla dışa aktarmanıza olanak tanır.

GridView verilerini dışa aktarmak için neden IronXL kullanmalıyım?

IronXL, sezgisel API'si ile GridView verilerini dışa aktarma sürecini basitleştirir, bu da geleneksel yöntemlerle zorlayıcı olabilen biçimlendirme ve stil uygulamalarını zahmetsizce sağlamanıza olanak tanır.

IronXL, GridView'ı Excel'e dışa aktarma sırasında biçimlendirmeyi destekler mi?

Evet, IronXL, fontlar, renkler ve hücre stilleri dahil olmak üzere çeşitli biçimlendirme seçeneklerini destekler, böylece dışa aktarılan Excel dosyalarınız profesyonel görünür 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 bir dizi özelleştirme seçeneği sunar, böylece GridView'den dışa aktarırken spesifik gereksinimlerinize uyacak şekilde hücre stillerini, fontları, renkleri ve daha fazlasını ayarlayabilirsiniz.

IronXL kullanarak büyük GridView veri kümesini Excel'e dışa aktarmak mümkün mü?

IronXL, performans sorunları yaşamadan kapsamlı GridView verilerini Excel'e dışa aktarmanızı sağlayacak şekilde büyük veri kümelerini verimli bir şekilde işleyebilir.

GridView verilerini dışa aktarmak için IronXL kullanmanın diğer yöntemlere göre faydaları nelerdir?

IronXL, biçimlendirme, özelleştirme ve büyük veri kümeleriyle başa çıkma için sağlam destek sunarak daha streamline ve esnek bir yaklaşım sunar ve birçok başka yöntemden üstündür.

GridView'ı Excel'e dışa aktarırken veri bütünlüğünü nasıl korurum?

IronXL, GridView'dan Excel'e dışa aktarma sürecinde veri türlerini ve formatlarını hassas bir şekilde dönüştürerek ve koruyarak veri bütünlüğünü sağlar.

IronXL, karmaşık yapıları olan GridView kontrollerinden veri dışa aktarabilir mi?

Evet, IronXL karmaşık yapıları olan GridView kontrollerinden veri işleyebilir ve dışa aktarabilir ve sonuç Excel dosyasında hiyerarşiyi ve biçimlendirmeyi korur.

IronXL, GridView verilerini hangi dosya formatlarına dışa aktarabilir?

IronXL esas olarak XLSX gibi Excel formatlarına veri dışa aktarır, ancak ihtiyaçlarınıza bağlı olarak esneklik sağlayan diğer formatları da (CSV gibi) destekler.

IronXL kullanarak koşullu biçimlendirmeyle GridView dışa aktarma desteği var mı?

IronXL, koşullu biçimlendirmeyi destekler, GridView verilerini Excel'e dışa aktarma yaparken hücre değerlerine göre dinamik olarak ayarlanacak kurallar ve stiller belirlemenize olanak tanır.

Jordi Bardia
Yazılım Mühendisi
Jordi Python, C# ve C++ konularında en yetkin, Iron Software'deki yeteneklerini kullanmadığı zamanlarda; oyun programlıyor. Ürün testi, ürün geliştirme ve araştırma sorumluluklarını paylaşan Jordi, sürekli ürün gelişimine büyük değer katıyor. Çeşitli deneyimleri onu ...
Daha Fazlasını Oku

Iron Destek Ekibi

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