Altbilgi içeriğine atla
IRONXL KULLANARAK

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

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

DataGridView verilerini bir Excel dosyasına aktarmak, Windows Forms geliştirmede en yaygın görevlerden biridir. Tablo verileri gösteren iş uygulamaları oluştururken -- ister satış raporları, ister envanter kayıtları, isterse müşteri listeleri olsun -- kullanıcılar bir düğmeye tıklayıp paylaşabilecekleri veya daha fazla analiz edebilecekleri düzgün biçimlendirilmiş bir Excel dosyası bekler. Uygun bir şekilde, her son kullanıcının makinesinde bir Microsoft Excel kurulumuna bağlı olmadan ve bellek kaçağı ya da sessizce kırılan COM interop temizleme koduyla boğuşmadan yapmak zordur. Bu kılavuz, IronXL kullanarak C#'ta DataGridView 'i Excel'e aktarmanın tüm sürecini kapsar; proje kurulumundan gelişmiş hücre biçimlendirmesine kadar, sonuca üretime hazır kodla ulaşırsınız.

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

DataGridView'i İhracat için Nasıl Ayarlarsınız?

DataGridView verilerini dışa aktarmanın geleneksel yaklaşımları Microsoft Interop'a dayanıyordu -- Add Reference açılır, COM sekmesine gidilir, Microsoft Excel Object Library seçilir ve hafıza sızıntılarından kaçınmak için Marshal.ReleaseComObject çağıran kırılgan kod yazılırdı. Bu model, uygulamanın çalıştığı her makinada Microsoft Excel yüklü olmasını gerektirir, büyük veri setleriyle yavaş çalışır ve Office lisanslarının eksik olduğu dağıtım ortamlarında sıklıkla COMException hataları üretir. Microsoft'un Office Otomasyonu rehberliği açıkça üçüncü taraf kütüphanelerini sunucu tarafı ve otomatik senaryolar için önerir.

IronXL tüm bu bağımlılıkları kaldırır. Microsoft Office veya herhangi bir COM kaydı olmadan .xlsx, .xls, .csv ve .ods dosyalarını okuyup yazan saf bir .NET kütüphanesidir. NuGet ile kurarsınız ve hemen kod yazmaya başlarsınız.

IronXL'in NuGet Üzerinden Kurulumu

.NET 10'u hedefleyerek Visual Studio'da yeni bir Windows Forms Uygulaması projesi oluşturarak başlayın. Form yüzeyine bir DataGridView kontrolü ve bir Button ekleyin. Butona btnExport adını verin ve etiket olarak 'Export to Excel' yazın. Ardından NuGet Paket Yöneticisi Konsolunu açın ve şunu çalıştırın:

Install-Package IronXL.Excel

Gerekli ad alanlarını form dosyanızın üst kısmına 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şlemleri için ihtiyaç duyduğunuz tüm IronXL türlerini ve DataTable nesneleri ile @@@--CODE-068--@@ tiplerini kapsar, bu türler ihracat hattına köprü kurar.

Örnek Verileri DataGridView Kontrolüne Nasıl Yükleriz?

Dışa aktarma mantığını oluşturmadan önce, DataGridView'inizi temsilci veri ile doldurun. Form1_Load olayı, veri kaynağı olarak DataTable bağlamanın doğru yeridir. Gerçek bir uygulamada bir veri tabanına sorgulama yapar veya bir hizmet çağırırdınız; burada kodlanmış bir DataTable, yapıyı net bir şekilde gösterir. Microsoft Docs üzerinden DataGridView kontrol genel bakışı, kontrolün veri kaynaklarını nasıl yönettiğine dair ek bağlam sağlar.

Bir DataTable'ı DataGridView'e Bağlama

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 işleyici imzası için üst düzey ifade stilini kullanır. DataTable, IronXL'in Excel çalışma kitabına yazarken koruyacağı dört tipli sütuna sahiptir -- tam sayı, dize, ondalık ve tam sayı. Yazılmış sütunlar önemlidir çünkü IronXL, sayısal sütunları metin yerine sayısal hücreler olarak yazar, bu da kullanıcıların verileri Excel'de yeniden biçimlendirmeden sıralayıp toplamalarını sağlar.

C# DataGridView'i Biçimlendirme ile Excel'e Aktarma: Tam Kılavuz: Görsel 2 - Form için UI

DataGridView, sütun başlık satırını DataTable sütun adlarından otomatik olarak oluşturur. İhracat yaptığınızda, bu başlık satırının Excel dosyasında korunmasını istersiniz, bu da ihracat kodunuzun başlıkları veri satırlarından ayrı olarak ele alması gerektiği anlamına gelir -- bir sonraki bölümde tam olarak bu ele alınmaktadır.

Üretim için, DataTable Entity Framework, Dapper, ADO.NET veya herhangi bir başka veri erişim katmanından gelsin, aynı desen uygulanır. DataGridView bağı, dışa aktarma kodundan ayrıdır, böylece veri kaynağını dışa aktarma mantığını değiştirmeden değiştirebilirsiniz.

DataGridView Verilerini Excel Dosyasına Nasıl İhari Ederiz?

Temel ihraç mantığı, butona tıklama işleyicisinin içinde çalışır. IronXL, sütundan hücreye eşlemeyi otomatik olarak yöneten LoadFromDataTable yöntemini WorkSheet üzerinden sağlar. En temiz yaklaşım, DataGridView'den bir DataTable çıkarıp doğrudan geçirmektir. .xlsx formatının temelini oluşturan Open XML SDK, Microsoft tarafından belgelenmiştir ve IronXL gibi saf .NET çözümlerinin, programatik üretim için Interop'tan neden daha iyi performans gösterdiğini doğrular.

Butona Tıklama İhraç İşleyicisi

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 Biçimlendirme ile Excel'e Aktarma: Tam Kılavuz: Görsel 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 bayrak alır -- bu hücreler başlık hücreleriniz olur. Çalışma kitabı, kodu kullanıcı hesapları arasında taşınabilir hale getiren, sert kodlanmış bir yol yerine Environment.SpecialFolder.Desktop kullanılarak kullanıcının Masaüstüne kaydedilir.

null denetimi (?? DBNull.Value) prevents a NullReferenceException bir hücrede değer olmadığında oluşur. Gerçek dünya verilerinde, isteğe bağlı alanların boş olabileceği senaryolar için önemlidir. IronXL, DBNull'ı, dizgi 'DBNull' yerine boş bir hücre olarak yazar, böylece çıktı temiz kalır.

Excel dosyalarından verileri bir DataGridView'e geri okuma ile ilgili daha fazla ayrıntı için, ters işlemi ve çok sayfalı çalışma kitapları için Excel'i DataSet'e dönüştürme işlemi nasıl yapılır gibi konuları kapsayan IronXL DataTable belgelerine bakın.

İhraç Edilen Excel Dosyasına Profesyonel Biçimlendirme Nasıl Uygulanır?

Excel dosyasındaki duyarlı veriler işlevseldir, ancak profesyonel biçimlendirilmiş çıktı -- kalın başlıklar, içeriğe uygun sütun genişlikleri, alternatif satır arka plan renkleri -- kullanıcının güvendiği bir araç ile hemen yeniden biçimlendirilip el ile yola koyuldukları bir araç arasında fark yaratır. IronXL, yazı tipleri, renkler, kenarlıklar, sayı formatları ve hizalama dahil olmak üzere zengin bir hücre stil API sağlar. IronXL'nin yazdığı altyapı formatını tanımlayan OOXML tablo stili spesifikasyonu, çıktının uyumlu herhangi bir uygulamada doğru şekilde açılmasına güven verir.

Başlık Stilleri ve Alternatif Satır Renkleri Uygulama

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);
}
Option Strict On



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 Biçimlendirme ile Excel'e Aktarma: Tam Kılavuz: Görsel 4 - Oluşturulan biçimlendirilmiş Excel dosyasının çıktısı

Biçimlendirme kodu birkaç tekniği uygular. Başlık satırı, mavi bir arka plana (#4472C4) ve beyaz metne, 12 punto kalın yazı tipine ve ortalanmış hizalamaya sahiptir -- bu, standart bir iş elektronik tablo stilidir. Veri satırları, geniş tablolarda kullanıcıların yerini kaybetmeden okuyabilmesini 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, bu nedenle değerler, elektronik tabloda dolar işaretleri ve iki ondalık basamakla görüntülenir, ancak alttaki sayısal veriler değişmez. AutoSizeColumn her sütunu en uzun değerine uygun hale getirir, böylece içerik kesilmez.

Bu şablonu hücre kenarlık stilinde, koşullu biçimlendirme, ve veri doğrulama kurallarıyla daha da genişletebilirsiniz. Kurumsal bir şablonla eşleşmesi gereken raporlar için, sayfa düzenini ve baskı alanını ayarlayarak dosyanın dağıtılmadan önce baskı için hazır hale gelmesini sağlayabilirsiniz.

Büyük Veri Kümeleri ve Performans Ayarlama Nasıl Ele Alınır?

Bir DataGridView, binlerce satıra bağlandığında, hücre hücre yineleme dikkat çekici şekilde yavaş olur. İki optimizasyon, performansı önemli ölçüde artırır. İlk olarak, hücre başına SetCellValue çağrıları yerine LoadFromDataTable kullanın. İkincisi, veri kaynağınız bir DataTable ise, DataGridView satırları aracılığıyla değerleri çıkarmak yerine, doğrudan IronXL'e aktarın:

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ırlı veri setleri için, dışa aktarma işlemini arka plan iş parçacığında çalıştırmak UI'yi duyarlı tutar. Dışa aktarma mantığını Task.Run içine sarın ve Invoke kullanarak MessageBox.Show çağrısını UI iş parçacığına aktarın. IronXL, ayrı WorkBook örnekleri üzerinde yazma işlemleri için iş parçacığı güvenlidir, bu nedenle gerekirse birden çok dışa aktarma işini eşzamanlı olarak çalıştırabilirsiniz.

Ek performans kaynakları:

DataGridView İhracı İçin IronXL ve Microsoft Interop Nasıl Karşılaştırılır?

Birçok geliştirici, Office ile birlikte geldiği için Microsoft Excel Interop ile başlamaktadır ve ek paketler gerektirmez. Ancak, Interop'un üretim ortamlarında hızla ortaya çıkan gerçek dünya maliyetleri vardır. Aşağıdaki tablo önemli farkları özetler:

DataGridView İhracı için IronXL ve Microsoft Excel Interop
Yetenek IronXL Microsoft Interop
Microsoft Excel'in kurulumu gerekli Hayır Evet
Sunucu/bulut ortamlarında çalışır Evet Hayır (Microsoft tarafından desteklenmeyen)
COM nesne temizliği gereklidir Hayır Evet (Marshal.ReleaseComObject)
Büyük veri kümeleriyle performans Hızlı (saf .NET) Yavaş (COM arayıcı genel maliyeti)
Yükleme yöntemi NuGet COM başvurusu / Office kurulumu
Destekli .NET sürümleri .NET 4.6.2 -- .NET 10 Yalnızca .NET Framework (sınırlı)
XLSX, CSV, ODS desteği Evet Yalnızca Microsoft Excel üzerinden XLSX/XLS

Microsoft'un kendi belgeleri, stabilite ve lisans endişelerini öne sürerek, sunucularda veya servis hesaplarında Office Interop kullanımına karşı uyarır. IronXL, Azure App Service, Windows Service hostları, Docker kapları ve Excel gibi bir masaüstü uygulamanın çalışmasının mümkün olmadığı diğer başsız ortamlarda doğru şekilde çalışır.

Interop'u zaten kullanan ve geçiş yapmak isteyen ekipler için, IronXL'in API'si, çoğu WorkBook ve WorkSheet işlemlerinin doğrudan çevrileceği kadar yakındır. IronXL geçiş rehberi yaygın Interop kalıplarını ve bunların IronXL eşdeğerlerini kapsar.

Sonraki Adımlarınız Neler?

DataGridView 'i IronXL kullanarak Excel'e aktarmak, yalnızca bir NuGet paketi kurulumunu ve birkaç satır kodu gerektirir; bu, kırılgan COM interop yaklaşımını temiz, bakım yapılabilir ve herhangi bir dağıtım ortamında çalışan bir çözümle değiştirir. Burada ele alınan teknikler -- temel ihraç, biçimlendirilmiş çıktı, büyük veri kümesi optimizasyonları ve karşılaştırma tablosu -- bu özelliği üretime hazır bir Windows Forms uygulamasına sevk etmek için gereken her şeyi verir.

Buradan, bu ilgili yetenekleri keşfedin:

Ücretsiz IronXL denemesine başlayarak projenizde tam özellik setini test edin veya IronXL lisans seçeneklerini inceleyin; üretim dağıtımına hazır olduğunuzda.

Sıkça Sorulan Sorular

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

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

DataGridView'i Excel'e ihraç ederken hangi biçimlendirme seçenekleri mevcuttur?

IronXL kalın yazı tiplerini, arka plan renklerini, yazı tiplerini, yatay hizalamayı, sayı formatlarını (örneğin döviz), otomatik boyutlandırma sütunlarını, kenarlık stillerini ve koşullu biçimlendirmeyi destekler.

DataGridView verilerini ihraç etmek için Microsoft Excel'in yüklenmesi gerekiyor mu?

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

DataGridView'i Excel'e ihraç ederken başlıkları biçimlendirebilir miyim?

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

DataGridView'den ihraç ederken Excel'de alternatif satır renklerini nasıl uygularım?

DataGridView satırlarında yineledikçe sıra dizinini izleyin ve çift satırlar için worksheet[rangeAddress].Style.SetBackgroundColor'i seçtiğiniz hex rengiyle uygulamanız gerekiyor.

Büyük veri kümelerini DataGridView'den Excel'e ihraç ederken nasıl işlerim?

Datatable'in altında bulunan veri tablosunu worksheet.LoadFromDataTable'a doğrudan ileterek hücreleri birer birer yinelemek yerine kullanın. Çok büyük kümeler için, ihrakı arka plan iş parçacığında çalıştırmak için Task.Run kullanın.

IronXL'nin Microsoft Excel Interop ile DataGridView ihrakı için karşılaştırması nasıldır?

IronXL, Microsoft Excel'i gerektirmez, sunucu ve bulut ortamlarında çalışır, herhangi bir COM temizleme koduna ihtiyaç duymaz ve büyük veri kümeleriyle çok daha hızlı performans gösterir.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

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