Altbilgi içeriğine atla
IRONXL KULLANARAK

C# DataGridView'den Excel'e Dışa Aktarma: Formatlama ile Tam Kılavuz | IronXL

C# DataGridView'i Excel'e Biçimlendirme ile Aktarma: Tam Kılavuz: Görüntü 1 - C# DataGridView'i Excel'e Biçimlendirme ile Aktarma

Verileri DataGridView Excel dosyasına aktarmak, Windows Forms geliştirmede en yaygın görevlerden biridir. İş uygulamaları oluştururken, kullanıcılar -- ister satış raporları, ister envanter kayıtları, ister müşteri listeleri, tablo biçimindeki verileri gösteren bir uygulama -- bir düğmeye tıklayarak paylaşabilecekleri veya daha fazla analiz edebilecekleri düzgün biçimlendirilmiş bir Excel dosyası almayı beklerler. Bu işi temiz bir şekilde, her kullanıcının makinesine Microsoft Excel yüklemeye bağımlı olmadan ve bellek sızıntısı yapan veya sessizce hata veren bir COM interop temizleme kodu ile boğuşmadan yapmak büyük bir zorluktur. Bu kılavuz, proje kurulumundan gelişmiş hücre biçimlendirmeye kadar IronXL kullanarak C# dilinde DataGridView Excel'e aktarmanın tam sürecini ele alır, böylece üretime hazır kod elde edersiniz.

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

DataGridView Export için Bir Windows Forms Projesi Nasıl Kurulur?

Geleneksel yaklaşımlar, verileri DataGridView aktarmak için Microsoft Interop'a dayanıyordu -- Add Reference'i açardınız, COM sekmesine giderdiniz, Microsoft Excel Object Library'i seçerdiniz ve bellek sızıntılarını önlemek için Marshal.ReleaseComObject çağrısı yapan kırılgan bir kod yazardınız. Bu model, uygulamanın çalıştığı her makinede Microsoft Excel yüklü olmasını gerektirir, büyük veri kümeleriyle yavaş çalışır ve genellikle Office lisanslarının bulunmadığı dağıtım ortamlarında COMException hataları üretir. Microsoft'un Office Otomasyonu hakkındaki kılavuzu, sunucu tarafı ve otomatik senaryolar için üçüncü taraf kütüphaneler önerir.

IronXL bu bağımlılıkların hepsini ortadan kaldırır. .NET kitaplığı, Microsoft Office veya herhangi bir COM kaydı olmadan .xlsx, .xls, .csv ve .ods dosyalarını okur ve yazar. NuGet üzerinden yüklersiniz ve hemen kod yazmaya başlarsınız.

NuGet ile IronXL Yükleme

.NET 10 hedefleyen Visual Studio'da yeni bir Windows Forms Uygulama projesi oluşturarak başlayın. Bir DataGridView kontrolü ve forma bir Button ekleyin. Butona btnExport adını verin ve "Excel'e Aktar" etiketi koyun. Sonra NuGet Paketi Yonetici Konsolunu açin ve şu komutu calistirin:

Install-Package IronXl.Excel
Install-Package IronXl.Excel
SHELL

Gerekli ad alanlarini form dosyanizin en ustune ekleyin:

using IronXL;
using System.Data;
using IronXL;
using System.Data;
Imports IronXL
Imports System.Data
$vbLabelText   $csharpLabel

Bu iki ad alanı, Excel çalışma kitaplarını okuma ve yazma için gereken tüm IronXL türlerini ve veri aktarım hattınıza köprü kuran DataTable nesneleriyle çalışmak için standart System.Data türlerini kapsar.

Numune Verileri DataGridView Kontrolune Nasıl Yuklersiniz?

Dışa aktarma mantığını oluşturmadan önce DataGridView temsilci veriyle doldurun. Form1_Load olayı, veri kaynağı olarak DataTable'ı bağlamak için doğru yerdir. Gerçek bir uygulamada bir veritabanını sorgular veya bir hizmet çağırırdınız; burada sabit kodlu bir DataTable, yapıyı açıkça gösterir. Microsoft Dokumlarinda DataGridView kontrolu genel bakışı kontrolun veri kaynaklarini nasıl yonettigi konusunda ek baglam sunar.

DataGridView'e DataTable Baglama

void Form1_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("ProductID", typeof(int));
    dt.Columns.Add("ProductName", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("Stock", typeof(int));

    dt.Rows.Add(1, "Laptop", 999.99m, 50);
    dt.Rows.Add(2, "Mouse", 29.99m, 200);
    dt.Rows.Add(3, "Keyboard", 79.99m, 150);
    dt.Rows.Add(4, "Monitor", 349.99m, 75);
    dt.Rows.Add(5, "Webcam", 89.99m, 120);

    dataGridView1.DataSource = dt;
}
void Form1_Load(object sender, EventArgs e)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("ProductID", typeof(int));
    dt.Columns.Add("ProductName", typeof(string));
    dt.Columns.Add("Price", typeof(decimal));
    dt.Columns.Add("Stock", typeof(int));

    dt.Rows.Add(1, "Laptop", 999.99m, 50);
    dt.Rows.Add(2, "Mouse", 29.99m, 200);
    dt.Rows.Add(3, "Keyboard", 79.99m, 150);
    dt.Rows.Add(4, "Monitor", 349.99m, 75);
    dt.Rows.Add(5, "Webcam", 89.99m, 120);

    dataGridView1.DataSource = dt;
}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim dt As New DataTable()
    dt.Columns.Add("ProductID", GetType(Integer))
    dt.Columns.Add("ProductName", GetType(String))
    dt.Columns.Add("Price", GetType(Decimal))
    dt.Columns.Add("Stock", GetType(Integer))

    dt.Rows.Add(1, "Laptop", 999.99D, 50)
    dt.Rows.Add(2, "Mouse", 29.99D, 200)
    dt.Rows.Add(3, "Keyboard", 79.99D, 150)
    dt.Rows.Add(4, "Monitor", 349.99D, 75)
    dt.Rows.Add(5, "Webcam", 89.99D, 120)

    dataGridView1.DataSource = dt
End Sub
$vbLabelText   $csharpLabel

Bu kod, olay isleyici imzası icin ust seviye aciklama stilini kullanir. DataTable dört tipte sütun içerir -- tamsayı, dize, ondalık ve tamsayı -- ki IronXL, Excel çalışma kitabına yazarken bunları korur. Typed kolonlar onemlidir cunku IronXL sayisal kolonlari metin yerine sayi hucreleri olarak yazar, bu da kullanicilarin Excel'de format değiştirmeden degerleri siralamalarina ve toplamalasina olanak tanir.

C# DataGridView'i Excel'e Biçimlendirme ile Aktarma: Tam Kılavuz: Görüntü 2 - Form için kullanıcı arayüzü

DataGridView, sütun adlarından otomatik olarak bir sütun başlığı satırı oluşturur. Ihrac ettiginizde, bu baslik satirinin Excel dosyasinda korunmasini istersiniz, bu da ihracat kodunuzun basliklarla veri satirlarini ayri ayri ele alması gerektiği anlamina gelir -- bir sonraki bölüm tam olarak bunu kapsar.

Üretim kullanımı için, DataTable Entity Framework, Dapper, ADO.NET veya herhangi bir veri erişim katmanından gelse de aynı model geçerlidir. DataGridView bağlaması, dışa aktarma kodundan ayrılmıştır, bu nedenle veri kaynağını dışa aktarma mantığına dokunmadan değiştirebilirsiniz.

DataGridView Verilerini Excel Dosyasına Nasıl Ihrac Edebilirsiniz?

Ana ihrac mantigi dugme tiklama isleyicisinin icinde calisir. IronXL, sütun-c-v-k-s hücre eşlemesini otomatik olarak işleyen bir LoadFromDataTable yöntemi sağlar. En temiz yaklaşım, DataTable'yi DataGridView'den ayırmak ve doğrudan iletmektir. Open XML SDK, .xlsx formatının temelini oluşturur ve Microsoft tarafından belgelenmiştir. Temiz .NET çözümleri olan IronXL'in, programatik jenerasyon için Interop'a göre neden daha üstün olduğunu doğrular.

Buton Tiklama Ihrac Isleyici

void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        DataTable dt = new DataTable();

        foreach (DataGridViewColumn column in dataGridView1.Columns)
            dt.Columns.Add(column.HeaderText);

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.IsNewRow) continue;

            DataRow dataRow = dt.NewRow();
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
                dataRow[i] = row.Cells[i].Value ?? DBNull.Value;

            dt.Rows.Add(dataRow);
        }

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.DefaultWorkSheet;
        worksheet.Name = "Product Data";

        worksheet.LoadFromDataTable(dt, true);

        string outputPath = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            "DataGridViewExport.xlsx"
        );

        workbook.SaveAs(outputPath);
        MessageBox.Show($"Exported successfully to:\n{outputPath}", "Export Complete",
            MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Export failed: {ex.Message}", "Error",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        DataTable dt = new DataTable();

        foreach (DataGridViewColumn column in dataGridView1.Columns)
            dt.Columns.Add(column.HeaderText);

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.IsNewRow) continue;

            DataRow dataRow = dt.NewRow();
            for (int i = 0; i < dataGridView1.Columns.Count; i++)
                dataRow[i] = row.Cells[i].Value ?? DBNull.Value;

            dt.Rows.Add(dataRow);
        }

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.DefaultWorkSheet;
        worksheet.Name = "Product Data";

        worksheet.LoadFromDataTable(dt, true);

        string outputPath = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            "DataGridViewExport.xlsx"
        );

        workbook.SaveAs(outputPath);
        MessageBox.Show($"Exported successfully to:\n{outputPath}", "Export Complete",
            MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    catch (Exception ex)
    {
        MessageBox.Show($"Export failed: {ex.Message}", "Error",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
Imports System
Imports System.Data
Imports System.IO
Imports System.Windows.Forms

Public Sub btnExport_Click(sender As Object, e As EventArgs)
    Try
        Dim dt As New DataTable()

        For Each column As DataGridViewColumn In dataGridView1.Columns
            dt.Columns.Add(column.HeaderText)
        Next

        For Each row As DataGridViewRow In dataGridView1.Rows
            If row.IsNewRow Then Continue For

            Dim dataRow As DataRow = dt.NewRow()
            For i As Integer = 0 To dataGridView1.Columns.Count - 1
                dataRow(i) = If(row.Cells(i).Value, DBNull.Value)
            Next

            dt.Rows.Add(dataRow)
        Next

        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
        worksheet.Name = "Product Data"

        worksheet.LoadFromDataTable(dt, True)

        Dim outputPath As String = Path.Combine(
            Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
            "DataGridViewExport.xlsx"
        )

        workbook.SaveAs(outputPath)
        MessageBox.Show($"Exported successfully to:{Environment.NewLine}{outputPath}", "Export Complete",
                        MessageBoxButtons.OK, MessageBoxIcon.Information)
    Catch ex As Exception
        MessageBox.Show($"Export failed: {ex.Message}", "Error",
                        MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
End Sub
$vbLabelText   $csharpLabel

C# DataGridView'i Excel'e Biçimlendirme ile Aktarma: Tam Kılavuz: Görüntü 3 - Oluşturulan Excel dosyası

LoadFromDataTable(dt, true) çağrısı, DataTable'ü ve IronXL'e sütun adlarını ilk Excel satırı olarak yazmasını söyleyen bir boolean bayrağını alır -- bunlar başlık hücreleriniz olur. Çalışma kitabı, kullanıcı hesabı üzerinden kodun taşınabilir olmasını sağlamak için sabit kodlanmış bir yol yerine Environment.SpecialFolder.Desktop kullanarak kullanıcının Masaüstüne kaydedilir.

null kontrol (?? Bir hücrede değer olmadığında NullReferenceException @@--CODE-310@@DBNull.Value). Bu, isteğe bağlı alanlarin bos olabilecegi gerçek dunya verileri icin onemlidir. IronXL,DBNull`'i "DBNull" dizesi yerine boş bir hücre olarak yazar, böylece çıktı temiz kalır.

Excel dosyalarından verileri geri DataGridView içine okumak hakkında daha fazla ayrıntı için, çok sayfalı çalışma kitapları için IronXL DataTable belgelerini ve Excel'i DataSet'e dönüştürme işlemini kapsar.

Ihrac Edilen Excel Dosyasina Profesyonel Biçimlendirme Nasıl Uygulanır?

Excel dosyasındaki düz veriler işlevseldir, ancak profesyonel olarak biçimlendirilmiş çıktılar -- kalın başlıklar, içeriğe uygun sütun genişlikleri, ardışık satır arka plan renkleri -- kullanıcıların güven duyduğu bir araç ile hemen el ile yeniden biçimlendirilen bir araç arasında fark yaratır. IronXL, fontlar, renkler, kenarlıklar, sayi formatlari ve hizalama kaplamalari iceren zengin bir hucre stili API'si sunar. IronXL'un yazdigi, uyumlu her uygulamada dogru acilmasina guven duydugunuz ooutput formatini tanimlayan OOXML (;calisma kitaplari stilleri icin özellik belgelerini okuyun.

Baslik Stillerini ve Alternatif Satir Renklerini Uygulamak

void ExportWithFormatting(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    worksheet.Name = "Formatted Export";

    string[] headers = { "ID", "Product Name", "Price", "Stock" };

    // Write and style header row
    for (int col = 0; col < headers.Length; col++)
    {
        char colLetter = (char)('A' + col);
        string cellAddress = $"{colLetter}1";

        worksheet.SetCellValue(0, col, headers[col]);
        worksheet[cellAddress].Style.Font.Bold = true;
        worksheet[cellAddress].Style.Font.Height = 12;
        worksheet[cellAddress].Style.SetBackgroundColor("#4472C4");
        worksheet[cellAddress].Style.Font.Color = "#FFFFFF";
        worksheet[cellAddress].Style.HorizontalAlignment =
            IronXl.Styles.HorizontalAlignment.Center;
    }

    // Write data rows with alternating background colors
    int rowIndex = 1;
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.IsNewRow) continue;

        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            worksheet.SetCellValue(rowIndex, col,
                row.Cells[col].Value?.ToString() ?? string.Empty);
        }

        if (rowIndex % 2 == 0)
        {
            string rangeAddress = $"A{rowIndex + 1}:D{rowIndex + 1}";
            worksheet[rangeAddress].Style.SetBackgroundColor("#D6DCE5");
        }

        rowIndex++;
    }

    // Format the Price column as currency
    worksheet["C2:C100"].Style.Format = "$#,##0.00";

    // Auto-fit column widths
    worksheet.AutoSizeColumn(0);
    worksheet.AutoSizeColumn(1);
    worksheet.AutoSizeColumn(2);
    worksheet.AutoSizeColumn(3);

    string outputPath = Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
        "FormattedExport.xlsx"
    );

    workbook.SaveAs(outputPath);
    MessageBox.Show("Formatted export complete.", "Done",
        MessageBoxButtons.OK, MessageBoxIcon.Information);
}
void ExportWithFormatting(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.DefaultWorkSheet;
    worksheet.Name = "Formatted Export";

    string[] headers = { "ID", "Product Name", "Price", "Stock" };

    // Write and style header row
    for (int col = 0; col < headers.Length; col++)
    {
        char colLetter = (char)('A' + col);
        string cellAddress = $"{colLetter}1";

        worksheet.SetCellValue(0, col, headers[col]);
        worksheet[cellAddress].Style.Font.Bold = true;
        worksheet[cellAddress].Style.Font.Height = 12;
        worksheet[cellAddress].Style.SetBackgroundColor("#4472C4");
        worksheet[cellAddress].Style.Font.Color = "#FFFFFF";
        worksheet[cellAddress].Style.HorizontalAlignment =
            IronXl.Styles.HorizontalAlignment.Center;
    }

    // Write data rows with alternating background colors
    int rowIndex = 1;
    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.IsNewRow) continue;

        for (int col = 0; col < dataGridView1.Columns.Count; col++)
        {
            worksheet.SetCellValue(rowIndex, col,
                row.Cells[col].Value?.ToString() ?? string.Empty);
        }

        if (rowIndex % 2 == 0)
        {
            string rangeAddress = $"A{rowIndex + 1}:D{rowIndex + 1}";
            worksheet[rangeAddress].Style.SetBackgroundColor("#D6DCE5");
        }

        rowIndex++;
    }

    // Format the Price column as currency
    worksheet["C2:C100"].Style.Format = "$#,##0.00";

    // Auto-fit column widths
    worksheet.AutoSizeColumn(0);
    worksheet.AutoSizeColumn(1);
    worksheet.AutoSizeColumn(2);
    worksheet.AutoSizeColumn(3);

    string outputPath = Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
        "FormattedExport.xlsx"
    );

    workbook.SaveAs(outputPath);
    MessageBox.Show("Formatted export complete.", "Done",
        MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Imports System
Imports System.IO
Imports System.Windows.Forms
Imports IronXL

Sub ExportWithFormatting(sender As Object, e As EventArgs)
    Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
    Dim worksheet As WorkSheet = workbook.DefaultWorkSheet
    worksheet.Name = "Formatted Export"

    Dim headers As String() = {"ID", "Product Name", "Price", "Stock"}

    ' Write and style header row
    For col As Integer = 0 To headers.Length - 1
        Dim colLetter As Char = ChrW(AscW("A"c) + col)
        Dim cellAddress As String = $"{colLetter}1"

        worksheet.SetCellValue(0, col, headers(col))
        worksheet(cellAddress).Style.Font.Bold = True
        worksheet(cellAddress).Style.Font.Height = 12
        worksheet(cellAddress).Style.SetBackgroundColor("#4472C4")
        worksheet(cellAddress).Style.Font.Color = "#FFFFFF"
        worksheet(cellAddress).Style.HorizontalAlignment = IronXL.Styles.HorizontalAlignment.Center
    Next

    ' Write data rows with alternating background colors
    Dim rowIndex As Integer = 1
    For Each row As DataGridViewRow In dataGridView1.Rows
        If row.IsNewRow Then Continue For

        For col As Integer = 0 To dataGridView1.Columns.Count - 1
            worksheet.SetCellValue(rowIndex, col, If(row.Cells(col).Value?.ToString(), String.Empty))
        Next

        If rowIndex Mod 2 = 0 Then
            Dim rangeAddress As String = $"A{rowIndex + 1}:D{rowIndex + 1}"
            worksheet(rangeAddress).Style.SetBackgroundColor("#D6DCE5")
        End If

        rowIndex += 1
    Next

    ' Format the Price column as currency
    worksheet("C2:C100").Style.Format = "$#,##0.00"

    ' Auto-fit column widths
    worksheet.AutoSizeColumn(0)
    worksheet.AutoSizeColumn(1)
    worksheet.AutoSizeColumn(2)
    worksheet.AutoSizeColumn(3)

    Dim outputPath As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "FormattedExport.xlsx")

    workbook.SaveAs(outputPath)
    MessageBox.Show("Formatted export complete.", "Done", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
$vbLabelText   $csharpLabel

C# DataGridView'i Excel'e Biçimlendirme ile Aktarma: Tam Kılavuz: Görüntü 4 - Oluşturulan biçimli Excel dosyasının çıktısı

Biçimlendirme kodu birkaç teknik uygular. Başlık satırı, beyaz yazı, 12 punto kalın yazı karakteri ve ortalanmış hizalama ile mavi bir arka plan (#4472C4) alır -- standart bir iş elektronik tablosu stili. Veri satırları, geniş tabloları okurken kullanıcıların konumlarını kaybetmeden okumalarını kolaylaştırmak için her çift satırda beyaz ve açık gri (#D6DCE5) arasında değişir. Fiyat sütunu, Excel'in yerleşik para birimi biçimini ($#,##0.00) kullanır, böylece elektronik tabloda dolar işaretleriyle ve iki ondalık basamakla görüntülenir, ancak temel sayısal veriler değişmez. AutoSizeColumn her sütunu en uzun değerine uyacak şekilde sığdırır, böylece hiçbir içerik kesilmez.

Bu deseni hucre kenarlik stili, kosullu biçimlendirme ve veri doğrulama kuralları ile daha da genişletebilirsiniz. Kurumsal sablona uyması gereken raporlar icin, sayfa düzenini ve baskı alanını ayarlayarak ihraç edilen dosyanın ayarlama olmadan baskıya hazır olmasini sağlayabilirsiniz.

Buyuk Veri Kümeleri ve Performans Ayarlamaları Nasıl Ele Alinir?

Binlerce satır bağlı olan bir DataGridView olduğunda, hücre hücre üzerinde yineleme yapmak belirgin şekilde yavaşlar. Iki optimizasyon performansi önemli ölçüde artırır. Önce, hücre başına SetCellValue çağrıları yerine LoadFromDataTable kullanın. İkinci olarak, veri kaynağınız bir DataTable ise, verileri DataGridView satırları üzerinden çıkarmak yerine doğrudan IronXL'e iletin:

void ExportLargeDataset(DataTable sourceTable)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    // Direct DataTable load -- fastest path for large data
    worksheet.LoadFromDataTable(sourceTable, true);

    // Apply header styling after load
    int colCount = sourceTable.Columns.Count;
    for (int col = 0; col < colCount; col++)
    {
        char colLetter = (char)('A' + col);
        worksheet[$"{colLetter}1"].Style.Font.Bold = true;
        worksheet[$"{colLetter}1"].Style.SetBackgroundColor("#4472C4");
        worksheet[$"{colLetter}1"].Style.Font.Color = "#FFFFFF";
    }

    workbook.SaveAs(Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
        "LargeExport.xlsx"
    ));
}
void ExportLargeDataset(DataTable sourceTable)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.DefaultWorkSheet;

    // Direct DataTable load -- fastest path for large data
    worksheet.LoadFromDataTable(sourceTable, true);

    // Apply header styling after load
    int colCount = sourceTable.Columns.Count;
    for (int col = 0; col < colCount; col++)
    {
        char colLetter = (char)('A' + col);
        worksheet[$"{colLetter}1"].Style.Font.Bold = true;
        worksheet[$"{colLetter}1"].Style.SetBackgroundColor("#4472C4");
        worksheet[$"{colLetter}1"].Style.Font.Color = "#FFFFFF";
    }

    workbook.SaveAs(Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
        "LargeExport.xlsx"
    ));
}
Option Strict On



Sub ExportLargeDataset(sourceTable As DataTable)
    Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
    Dim worksheet As WorkSheet = workbook.DefaultWorkSheet

    ' Direct DataTable load -- fastest path for large data
    worksheet.LoadFromDataTable(sourceTable, True)

    ' Apply header styling after load
    Dim colCount As Integer = sourceTable.Columns.Count
    For col As Integer = 0 To colCount - 1
        Dim colLetter As Char = ChrW(AscW("A"c) + col)
        worksheet($"{colLetter}1").Style.Font.Bold = True
        worksheet($"{colLetter}1").Style.SetBackgroundColor("#4472C4")
        worksheet($"{colLetter}1").Style.Font.Color = "#FFFFFF"
    Next

    workbook.SaveAs(Path.Combine(
        Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
        "LargeExport.xlsx"
    ))
End Sub
$vbLabelText   $csharpLabel

10.000'den fazla satır içeren veri kümeleri için, dışa aktarıma bir arka plan dizisinde çalışmak, kullanıcı arayüzünü yanıt verir durumda tutar. Dışa aktarma mantığını Task.Run içine sarın ve Invoke kullanarak MessageBox.Show çağrısını kullanıcı arayüzü dizisine yeniden iletin. IronXL, ayrı WorkBook örneklerinde yazma işlemleri için iş parçacığı güvenliğindedir, bu nedenle gerekirse birden çok dışa aktarmayı eşzamanlı olarak çalıştırabilirsiniz.

Ek performans kaynakları:

IronXL ile Microsoft Interop Atiliyor Mu? Nasıl Kiyaslanir?

Birçok geliştirici, Office ile birlikte geldiğinden ve ek paket gerektirmediğinden Microsoft Excel Interop ile başlar. Ancak, gerçek dunyada uretil yukselleri ortama hizla cikar. Aşağıdaki tablo temel farkları özetler:

IronXL Microsoft Excel Interop ile DataGridView Ihrac için karşılaştırması
Yetkinlik IronXL Microsoft Interop
Microsoft Excel kurulumu gerektirir Hayır Evet
Sunucu / bulut ortamlarda calisir Evet Hayir (Microsoft tarafindan desteklenmez)
COM nesnesi temizligi gerekli Hayır Evet (Marshal.ReleaseComObject)
Buyuk veri kumelemleri ile performans Hizli (saf .NET) Yavaş (COM araci masrafi)
Kurulum yöntemi NuGet COM referans / Ofis kurulumu
Desteklenen .NET surumleri .NET 4.6.2 -- .NET 10 Sadece .NET Framework (sinirli)
XLSX, CSV, ODS destegi Evet Yalnizca Excel uzerinden XLSX/XLS

Microsoft'un kendi belgeleri, Office Interop'un sunucularda veya hizmet hesaplarında kullanılmasına karsi sittis uzerinden stabilite ve lisans sorunları nedeniyle uyariyor. IronXL, Excel gibi masaustu uygulamalarının calistirilabilirliği olmayan her baslik ortamlarda -- Azure Uygulama Hizmeti, Windows Hizmetleri barındırıcıları, Docker containerları ve diğer -- dogru calisir.

Interop'u zaten kullanan ve geçiş yapmak isteyen ekipler için, IronXL'in API'si çoğu WorkBook ve WorkSheet işlemlerini doğrudan çeviren kadar yakındır. IronXL göç kılavuzu, yaygin Interop kalıplarını ve bunların IronXL karşılıklarını kaplar.

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

Verileri DataGridView IronXL kullanarak Excel'e aktarmak, yalnızca bir NuGet paketi yüklemesi ve birkaç kod satırı gerektirir, kırılgan COM interop yaklaşımını temiz, bakımı kolay bir çözüme dönüştürür ve her dağıtım ortamında çalışır. Burada kapsanan yöntemler -- temel çikarma, biçimlendirilmiş çıktılar, büyük veri kümeleri optimizasyonu ve karşılaştırmalı tablo -- bu özelliğin Windows Forms üretim uygulamasında nakledilmesi icin gereken her şeyi size sunar.

Bu noktadan itibaren, iliskili yetenekleri inceleyin:

C# ile sıfırdan Excel dosyaları oluşturun -- veri kaynagi olmadan calisma kitabı programli oluşturma Excel dosyalarını DataTable'ye okuyun -- uygulamaniza yeniden Excel verilerini import etmenin tersi işlemi Koşullu biçimlendirme uygulayın -- degerlerine gore otomatik olarak hucreleri vurgulama Excel'de grafik verileri belirleyin -- ihraç edilen calisma kitapçıklarına grafik ekleme Excel dosyalarını şifre korumaya alın -- dagıtımdan once raporları guvenli hale getirin

Ücretsiz IronXL denemenizi başlatın projenizde tam özellik setini test etmek icin ya da IronXL lisanslama seçeneklerini inceledikten sonra üretim yayınına hazır olduğunuzda.

Sıkça Sorulan Sorular

C# dilinde DataGridView verilerini Excel'e nasıl aktarırım?

NuGet ile IronXL'yi yükleyin, DataGridView'ınızdan bir DataTable çıkarın, bir WorkBook ve WorkSheet oluşturun, worksheet.LoadFromDataTable(dt, true) çağırın, ardından workbook.SaveAs ile kaydedin.

DataGridView Excel'e aktarırken hangi formatlama seçenekleri mevcut?

IronXL kalın fontlar, arka plan renkleri, font renkleri, yatay hizalama, numara formatları (para birimi gibi), otomatik boyut sütunları, kenarlık stilleri ve koşullu formatlama destekler.

DataGridView verilerini dışa aktarmak için Microsoft Excel'in yüklenmesine gerek var mı?

Hayır. IronXL, Microsoft Office veya makinede herhangi bir COM kaydı gerektirmeden Excel dosyaları üreten saf bir .NET kütüphanesidir.

DataGridView'ı Excel'e aktarırken başlıkları stilize edebilir miyim?

Evet. Başlık satırını yazdıktan sonra, her başlık hücresine adres tarafından erişin ve Style.Font.Bold, Style.SetBackgroundColor ve Style.Font.Color özelliklerini ayarlayın.

DataGridView'daki satırları Excel'e aktarırken dönüşümlü satır renklerini nasıl uygularım?

DataGridView satırlarını iter ederken satır indeksini takip edin ve çift satırlar için worksheet[rangeAddress].Style.SetBackgroundColor ile seçilen hex renk kullanarak bir aralık stili uygulayın.

DataGridView'ı Excel'e aktarırken büyük veri setleriyle nasıl başa çıkılır?

Temel DataTable'ı doğrudan worksheet.LoadFromDataTable'a iletin, hücre hücre iter etmek yerine. Çok büyük setler için, ihracatı Task.Run kullanarak bir arka plan iş parçacığında çalıştırın.

IronXL, DataGridView ihracatında Microsoft Excel Interop ile nasıl karşılaştırılır?

IronXL, Microsoft Excel gerektirmez, sunucu ve bulut ortamlarında çalışır, herhangi bir COM temizleme koduna ihtiyaç duymaz ve büyük veri setlerinde önemli ölçüde daha hızlı çalışı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