Altbilgi içeriğine atla
IRONXL KULLANARAK

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

ASP.NET GridView'den Excel Dosyasına Veri Aktarma

C# dilinde IronXL'i kurarak, bir WorkBook oluşturarak, GridView satırlarını yineleyerek, her hücre değerini karşılık gelen çalışma sayfası konumuna yazarak ve çalışma kitabını diske veya HTTP yanıt akışına kaydederek bir ASP.NET GridView'i Excel XLSX dosyasına aktarabilirsiniz. Bu yaklaşım, sunucuda Microsoft Office kurulumu gerektirmez ve .NET Framework, .NET Core ve .NET 5'ten .NET 10'a kadar web uygulamaları arasında güvenilir bir şekilde çalışır.

GridView verilerini Excel'e dışa aktarma, kurumsal ASP.NET Web Forms projelerinde standart bir gereksinimdir. Kullanıcılar, tarayıcıdan tablo verilerini raporlama, çevrimdışı analiz ve arşivleme için elektronik tablolara aktarmalıdır. Zorluk, sunucu tarafındaki GridView kontrolü ile düzgün yapılandırılmış bir .xlsx dosyası arasındaki boşluğu aşmak -- web sunucu ortamlarında çalışmayan Office Interop bağımlılıklarını eklemeden.

Bu kılavuz, üç aşamalı olarak zenginleştirilen dışa aktarma desenlerini adım adım açıklar: minimum düzeyde satır bazında bir dışa aktarma, sütun otomatik boyutlandırma ile başlık ve veri dışa aktarma ve oluşturulan HTML'yi tamamen atlayan bir DataTable-yönlendirmeli dışa aktarma. Her örnek, C# üst düzey açıklama-uyumlu kodu ve IronXL API'sini kullanır.

Bir ASP.NET Projesine IronXL Nasıl Kurulur?

Package Manager Console Visual Studio'da açın ve çalıştırın:

Install-Package IronXL.Excel

Alternatif olarak, Solution Explorer içinde projeye sağ tıklayın, NuGet Paketlerini Yönet seçeneğini seçin, IronXL arayın ve Install tıklayın. NuGet tüm geçiş bağımlılıklarını otomatik olarak çözer.

Paket yüklendikten sonra, kod-behind dosyanıza aşağıdaki using yönergelerini ekleyin:

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

IronXL, .NET Framework 4.6.2 ve üstünün yanı sıra .NET Core 3.1 ve .NET 5'ten .NET 10'a kadar destekler. Sunucuda da Office kurulumu veya COM kaydı gerektirmez. Tam API belgeleri IronXL nesne referansında mevcuttur.

Hangi NuGet Paket Kimliği Kullanılmalıdır?

Doğru paket kimliği IronXL (IronXL.Excel değil, bu bir eski takma addır). Kurulumdan sonra, IronXL.dll bileşeni otomatik olarak referanslanır. Yüklü sürümü doğrulamak için Solution Explorer'daki Paketler düğümünü kontrol edebilir veya proje dizininden dotnet list package çalıştırabilirsiniz.

IronXL, ASP.NET Core Web Uygulamalarında Çalışır mı?

Evet. Aynı API hem ASP.NET Web Forms hem de ASP.NET Core (MVC veya Razor Pages) projelerinde çalışır. Core projelerinde, sunucu tarafı dosya yolları oluştururken Server.MapPath yerine IWebHostEnvironment.WebRootPath veya Path.Combine(Directory.GetCurrentDirectory(), "Exports") kullanılmalıdır.

GridView Nasıl Excel Dosyasına Dışa Aktarılır?

En basit dışa aktarma deseni GridView içinde işlemiş her satır üzerinde yineleme yapar ve her hücrenin metnini karşılık gelen Excel çalışma sayfası hücresine kopyalar. ASPX işaretlemesinde, bir <asp:GridView ID="gvEmployees" runat="server" AutoGenerateColumns="true" /> kontrolü ve bir <asp:Button ID="btnExport" runat="server" Text="Export to Excel" OnClick="btnExport_Click" /> düğmesi ekleyin. runat="server" özelliği, her iki kontrolü de kod-behind'de erişilebilir hale getirir.

Kod arkası, ilk yüklemede örnek verileri bağlar ve düğme tıklandığında dışa aktarır:

using System;
using System.Data;
using System.Web.UI;
using IronXL;

public partial class GridViewExport : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridView();
        }
    }

    private void BindGridView()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("EmployeeID", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Department", typeof(string));
        dt.Columns.Add("Salary", typeof(decimal));

        dt.Rows.Add(1, "John Smith", "Engineering", 75000);
        dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
        dt.Rows.Add(3, "Michael Chen", "Finance", 70000);

        ViewState["EmployeeData"] = dt;
        gvEmployees.DataSource = dt;
        gvEmployees.DataBind();
    }

    protected void btnExport_Click(object sender, EventArgs e)
    {
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

        // Write header row
        for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
        {
            worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
        }

        // Write data rows
        for (int i = 0; i < gvEmployees.Rows.Count; i++)
        {
            for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
            {
                worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
            }
        }

        string filePath = Server.MapPath("~/Exports/EmployeeData.xlsx");
        workbook.SaveAs(filePath);
    }
}
using System;
using System.Data;
using System.Web.UI;
using IronXL;

public partial class GridViewExport : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridView();
        }
    }

    private void BindGridView()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("EmployeeID", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Department", typeof(string));
        dt.Columns.Add("Salary", typeof(decimal));

        dt.Rows.Add(1, "John Smith", "Engineering", 75000);
        dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
        dt.Rows.Add(3, "Michael Chen", "Finance", 70000);

        ViewState["EmployeeData"] = dt;
        gvEmployees.DataSource = dt;
        gvEmployees.DataBind();
    }

    protected void btnExport_Click(object sender, EventArgs e)
    {
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

        // Write header row
        for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
        {
            worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
        }

        // Write data rows
        for (int i = 0; i < gvEmployees.Rows.Count; i++)
        {
            for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
            {
                worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
            }
        }

        string filePath = Server.MapPath("~/Exports/EmployeeData.xlsx");
        workbook.SaveAs(filePath);
    }
}
Imports System
Imports System.Data
Imports System.Web.UI
Imports IronXL

Public Partial Class GridViewExport
    Inherits Page

    Protected Sub Page_Load(sender As Object, e As EventArgs)
        If Not IsPostBack Then
            BindGridView()
        End If
    End Sub

    Private Sub BindGridView()
        Dim dt As New DataTable()
        dt.Columns.Add("EmployeeID", GetType(Integer))
        dt.Columns.Add("Name", GetType(String))
        dt.Columns.Add("Department", GetType(String))
        dt.Columns.Add("Salary", GetType(Decimal))

        dt.Rows.Add(1, "John Smith", "Engineering", 75000)
        dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000)
        dt.Rows.Add(3, "Michael Chen", "Finance", 70000)

        ViewState("EmployeeData") = dt
        gvEmployees.DataSource = dt
        gvEmployees.DataBind()
    End Sub

    Protected Sub btnExport_Click(sender As Object, e As EventArgs)
        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")

        ' Write header row
        For j As Integer = 0 To gvEmployees.HeaderRow.Cells.Count - 1
            worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells(j).Text)
        Next

        ' Write data rows
        For i As Integer = 0 To gvEmployees.Rows.Count - 1
            For j As Integer = 0 To gvEmployees.Rows(i).Cells.Count - 1
                worksheet.SetCellValue(i + 1, j, gvEmployees.Rows(i).Cells(j).Text)
            Next
        Next

        Dim filePath As String = Server.MapPath("~/Exports/EmployeeData.xlsx")
        workbook.SaveAs(filePath)
    End Sub
End Class
$vbLabelText   $csharpLabel

WorkBook.Create(ExcelFileFormat.XLSX) çağrısı, modern Open XML formatını hedefleyen bir hafıza içi çalışma kitabını başlatır. CreateWorkSheet("Employees") ilk sayfayı ekler. Dış döngü (i) veri satırlarında ilerler; iç döngü (j) sütunlarda ilerler. Satır indeks i + 1, başlığın 0. satırda üzerine yazılmaması için veri hücreleri için kullanılır.

Neden IronXL Kullanmalıyız Excel Interop Yerine?

Excel Interop, sunucuda lisanslı bir Microsoft Excel kopyası gerektirir ve bellek sızıntılarını önlemek için açıkça serbest bırakılması gereken COM nesneleri oluşturur. IronXL, Open XML paketleri olarak direkt .xlsx dosyalarını okur ve yazar -- COM, Office veya Marshal.ReleaseComObject şablon gerektirmez. Bu, Office'un bulunmadığı IIS, Azure App Service, Docker ve diğer sunucu ortamlarında güvenirliği sağlar.

XLSX İndirme İşlemleri İçin Doğru MIME Türü Nedir?

Tarayıcının baytları satır içi sunmak yerine bir dosya kaydetme iletişim kutusu açmasını istediğinizde, yanıt içerik türünü application/vnd.openxmlformats-officedocument.spreadsheetml.sheet olarak ayarlayın ve çalışma kitabı baytlarını yanıt akışına yazmadan önce bir Content-Disposition: attachment başlığı ekleyin.

Sütun Başlıkları Nasıl Eklenir ve Sütunlar Nasıl Otomatik Boyutlandırılır?

Temel örnek HeaderRow.Cells'den çıkarılan başlıkları yazar ancak üretim dışa aktarımı da her sütunu Excel'de manuel ayarlamalar yapmadan okunabilir olacak şekilde otomatik boyutlandırmalıdır:

protected void btnExport_Click(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

    // Write column headers
    int colCount = gvEmployees.HeaderRow.Cells.Count;
    for (int i = 0; i < colCount; i++)
    {
        string header = gvEmployees.HeaderRow.Cells[i].Text;
        worksheet.SetCellValue(0, i, header);
    }

    // Write data rows
    for (int i = 0; i < gvEmployees.Rows.Count; i++)
    {
        for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
        {
            worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
        }
    }

    // Auto-size each column for readability
    for (int col = 0; col < colCount; col++)
    {
        worksheet.AutoSizeColumn(col);
    }

    string filePath = Server.MapPath("~/Exports/EmployeeReport.xlsx");
    workbook.SaveAs(filePath);
}
protected void btnExport_Click(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

    // Write column headers
    int colCount = gvEmployees.HeaderRow.Cells.Count;
    for (int i = 0; i < colCount; i++)
    {
        string header = gvEmployees.HeaderRow.Cells[i].Text;
        worksheet.SetCellValue(0, i, header);
    }

    // Write data rows
    for (int i = 0; i < gvEmployees.Rows.Count; i++)
    {
        for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
        {
            worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
        }
    }

    // Auto-size each column for readability
    for (int col = 0; col < colCount; col++)
    {
        worksheet.AutoSizeColumn(col);
    }

    string filePath = Server.MapPath("~/Exports/EmployeeReport.xlsx");
    workbook.SaveAs(filePath);
}
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
    Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
    Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")

    ' Write column headers
    Dim colCount As Integer = gvEmployees.HeaderRow.Cells.Count
    For i As Integer = 0 To colCount - 1
        Dim header As String = gvEmployees.HeaderRow.Cells(i).Text
        worksheet.SetCellValue(0, i, header)
    Next

    ' Write data rows
    For i As Integer = 0 To gvEmployees.Rows.Count - 1
        For j As Integer = 0 To gvEmployees.Rows(i).Cells.Count - 1
            worksheet.SetCellValue(i + 1, j, gvEmployees.Rows(i).Cells(j).Text)
        Next
    Next

    ' Auto-size each column for readability
    For col As Integer = 0 To colCount - 1
        worksheet.AutoSizeColumn(col)
    Next

    Dim filePath As String = Server.MapPath("~/Exports/EmployeeReport.xlsx")
    workbook.SaveAs(filePath)
End Sub
$vbLabelText   $csharpLabel

AutoSizeColumn(col), IronXL'i hücre içerik uzunluğuna göre en uygun sütun genişliğini hesaplaması için yönlendirir, bu da Excel masaüstü uygulamasında Biçim > Sütun Genişliğini Otomatik Ayarla işlemini yansıtır. Tüm veriler yazıldıktan sonra bir döngüde bunu çağırmak, her satırdan sonra çağırmaktan daha etkilidir çünkü nihayetinde içerik o noktada bilinir.

Ek stil seçenekleri -- kalın başlıklar, arka plan renkleri, sayı formatları -- için IronXL hücre stil kılavuzu'nu keşfedin. Birden çok sütuna yayılan rapor başlıkları oluşturmak için hücreleri birleştirebilirsiniz.

Başlık Hücrelerine Kalın Format Nasıl Uygulanır?

IStyle, worksheet["A1"].Style tarafından döndürülen obje (veya bir aralık) kullanın. Değerleri yazmadan önce veya sonra Font.Bold = true ayarlayın -- stil hücre içeriğinden ayrıdır:

// Bold the entire header row (columns A through D)
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.FontColor = "#FFFFFF";
// Bold the entire header row (columns A through D)
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.FontColor = "#FFFFFF";
' Bold the entire header row (columns A through D)
Dim headerRange = worksheet("A1:D1")
headerRange.Style.Font.Bold = True
headerRange.Style.BackgroundColor = "#4472C4"
headerRange.Style.Font.FontColor = "#FFFFFF"
$vbLabelText   $csharpLabel

Bu desen, herhangi bir boyutta aralıklar için eşit şekilde uygulanır. Stil özelliklerinin tam listesi için IronXL stil API referansı bakın.

Veri Nasıl Yalnızca Bir DataTable'dan Dışa Aktarılır?

İşlenmiş GridView satırları üzerinde yineleme yapmak, dışa aktarmanızı kontrolün mevcut görsel durumuna bağlar, bu da sayfalama, sıralama ve sütun görünürlüğü ayarlarından etkilenebilir. Özünde saklanan DataTable üzerinden dışa aktarma, ızgaranın nasıl yapılandırıldığına bakılmaksızın belirlenmiş bir sonuç üretir:

protected void btnExport_Click(object sender, EventArgs e)
{
    DataTable sourceData = ViewState["EmployeeData"] as DataTable;
    if (sourceData == null)
    {
        Response.Write("No data available to export.");
        return;
    }

    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Report");

    // Column headers from DataTable schema
    for (int i = 0; i < sourceData.Columns.Count; i++)
    {
        worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
    }

    // Data rows from DataRow objects
    for (int i = 0; i < sourceData.Rows.Count; i++)
    {
        for (int j = 0; j < sourceData.Columns.Count; j++)
        {
            worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());
        }
    }

    string filePath = Server.MapPath("~/Exports/DataExport.xlsx");
    workbook.SaveAs(filePath);
}
protected void btnExport_Click(object sender, EventArgs e)
{
    DataTable sourceData = ViewState["EmployeeData"] as DataTable;
    if (sourceData == null)
    {
        Response.Write("No data available to export.");
        return;
    }

    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Report");

    // Column headers from DataTable schema
    for (int i = 0; i < sourceData.Columns.Count; i++)
    {
        worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
    }

    // Data rows from DataRow objects
    for (int i = 0; i < sourceData.Rows.Count; i++)
    {
        for (int j = 0; j < sourceData.Columns.Count; j++)
        {
            worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());
        }
    }

    string filePath = Server.MapPath("~/Exports/DataExport.xlsx");
    workbook.SaveAs(filePath);
}
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
    Dim sourceData As DataTable = TryCast(ViewState("EmployeeData"), DataTable)
    If sourceData Is Nothing Then
        Response.Write("No data available to export.")
        Return
    End If

    Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
    Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Report")

    ' Column headers from DataTable schema
    For i As Integer = 0 To sourceData.Columns.Count - 1
        worksheet.SetCellValue(0, i, sourceData.Columns(i).ColumnName)
    Next

    ' Data rows from DataRow objects
    For i As Integer = 0 To sourceData.Rows.Count - 1
        For j As Integer = 0 To sourceData.Columns.Count - 1
            worksheet.SetCellValue(i + 1, j, sourceData.Rows(i)(j).ToString())
        Next
    Next

    Dim filePath As String = Server.MapPath("~/Exports/DataExport.xlsx")
    workbook.SaveAs(filePath)
End Sub
$vbLabelText   $csharpLabel

Sütun isimleri, GridView şablonunda uygulanan herhangi bir görüntü adı geçersiz kılmalarından ziyade orijinal veri şemasını yansıtan DataTable.Columns[i].ColumnName'den gelir. Hücre değerleri DataRow objelerinden sütun indeksi kullanılarak alınır, her değeri SetCellValue tatmin etmek için string'e dönüştürür.

Bu desen, GridView sayfalama kullandığında özellikle değerlidir -- gvEmployees.Rows üzerinde yineleme, yalnızca şu anda görünen sayfadaki satırları döndürürken, tam DataTable'den okuma her kaydı dışa aktarır.

Büyük DataTable Dışa Aktarım ile Ne Olur?

IronXL, büyük Excel veri setleri için etkili bir şekilde çalışma kitabı verilerini akışa alır. 100.000'den fazla satır içeren dışa aktarmalar için, iç içe döngüdeki bireysel hücreleri ayarlamaktansa, tek bir çalışma sayfası işlemi içinde SetCellValue çağrılarını toplamak üzerine düşünün. Ayrıca, çalışma kitabını bir MemoryStream'a yazabilir ve sunucu RAM'inde tüm dosyayı tutmaktan kaçınmak için Response akışına kademeli olarak boşaltabilirsiniz.

Dışa Aktarım Sırasında Hatalar Nasıl Yönetilir?

Üretim dışa aktarma işleyicileri, bir catch bloğu içinde IronXL işlemlerini sarmalı ve bir şeyler ters gittiğinde kullanıcıya açıklayıcı bir mesaj döndürmelidir. Yaygın hata modları arasında eksik ~/Exports/ dizini, dosya izin hataları ve oturum zaman aşımından sonra ViewState'nin null olması bulunur:

protected void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        DataTable sourceData = ViewState["EmployeeData"] as DataTable;
        if (sourceData == null)
            throw new InvalidOperationException("Session data has expired. Please reload the page.");

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

        for (int i = 0; i < sourceData.Columns.Count; i++)
            worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);

        for (int i = 0; i < sourceData.Rows.Count; i++)
            for (int j = 0; j < sourceData.Columns.Count; j++)
                worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());

        string filePath = Server.MapPath("~/Exports/SafeExport.xlsx");
        workbook.SaveAs(filePath);

        lblStatus.Text = "Export successful. File saved to server.";
    }
    catch (Exception ex)
    {
        lblStatus.Text = $"Export failed: {ex.Message}";
    }
}
protected void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        DataTable sourceData = ViewState["EmployeeData"] as DataTable;
        if (sourceData == null)
            throw new InvalidOperationException("Session data has expired. Please reload the page.");

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

        for (int i = 0; i < sourceData.Columns.Count; i++)
            worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);

        for (int i = 0; i < sourceData.Rows.Count; i++)
            for (int j = 0; j < sourceData.Columns.Count; j++)
                worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());

        string filePath = Server.MapPath("~/Exports/SafeExport.xlsx");
        workbook.SaveAs(filePath);

        lblStatus.Text = "Export successful. File saved to server.";
    }
    catch (Exception ex)
    {
        lblStatus.Text = $"Export failed: {ex.Message}";
    }
}
Protected Sub btnExport_Click(sender As Object, e As EventArgs)
    Try
        Dim sourceData As DataTable = TryCast(ViewState("EmployeeData"), DataTable)
        If sourceData Is Nothing Then
            Throw New InvalidOperationException("Session data has expired. Please reload the page.")
        End If

        Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
        Dim worksheet As WorkSheet = workbook.CreateWorkSheet("Employees")

        For i As Integer = 0 To sourceData.Columns.Count - 1
            worksheet.SetCellValue(0, i, sourceData.Columns(i).ColumnName)
        Next

        For i As Integer = 0 To sourceData.Rows.Count - 1
            For j As Integer = 0 To sourceData.Columns.Count - 1
                worksheet.SetCellValue(i + 1, j, sourceData.Rows(i)(j).ToString())
            Next
        Next

        Dim filePath As String = Server.MapPath("~/Exports/SafeExport.xlsx")
        workbook.SaveAs(filePath)

        lblStatus.Text = "Export successful. File saved to server."
    Catch ex As Exception
        lblStatus.Text = $"Export failed: {ex.Message}"
    End Try
End Sub
$vbLabelText   $csharpLabel

Dosyayı diske kaydetmek yerine doğrudan tarayıcı indirimi olarak sunan web uygulamaları için, içerik türü ve konum başlıklarını ayarladıktan sonra Response.BinaryWrite kullanın veya Response.OutputStream üzerine yazın. ~/Exports/ dizininin mevcut olduğundan ve IIS uygulama havuzu kimliğinin yazma iznine sahip olduğundan emin olun.

XLSX Dosyası Tarayıcı İndirimi Olarak Nasıl Gönderilir?

workbook.SaveAs(filePath) bir akış tabanlı yanıtla değiştirin:

using System.IO;

// ... inside btnExport_Click after populating the worksheet ...

byte[] fileBytes;
using (MemoryStream ms = new MemoryStream())
{
    workbook.SaveAs(ms);
    fileBytes = ms.ToArray();
}

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=EmployeeData.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
using System.IO;

// ... inside btnExport_Click after populating the worksheet ...

byte[] fileBytes;
using (MemoryStream ms = new MemoryStream())
{
    workbook.SaveAs(ms);
    fileBytes = ms.ToArray();
}

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=EmployeeData.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();
Imports System.IO

' ... inside btnExport_Click after populating the worksheet ...

Dim fileBytes As Byte()
Using ms As New MemoryStream()
    workbook.SaveAs(ms)
    fileBytes = ms.ToArray()
End Using

Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AddHeader("Content-Disposition", "attachment; filename=EmployeeData.xlsx")
Response.BinaryWrite(fileBytes)
Response.End()
$vbLabelText   $csharpLabel

Bu desen, geçici bir dosyayı disk üzerine yazmaktan kaçınır. MemoryStream sunucuda tahsis edilir, byte[] olarak sıralanır ve doğrudan müşteriye gönderilir. Response.End() çağrısı yanıtı boşaltır ve eklenen ikili veriden sonra herhangi bir sayfa işaretlemesinin eklenmesini önler.

Birden Çok Sayfa veya Gelişmiş Çalışma Kitapları Nasıl Dışa Aktarılır?

Tek bir WorkBook birden fazla sayfa içerebilir, bu da birkaç GridView'i -- veya aynı veri kümesini farklı ayrıntılı olarak -- tek bir dosyada dışa aktarmanız gerektiğinde kullanışlıdır. Her sekme için bir kez workbook.CreateWorkSheet(name) çağırın:

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

WorkSheet summary = workbook.CreateWorkSheet("Summary");
WorkSheet detail  = workbook.CreateWorkSheet("Detail");

// Populate summary sheet ...
// Populate detail sheet ...

workbook.SaveAs(Server.MapPath("~/Exports/FullReport.xlsx"));
WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

WorkSheet summary = workbook.CreateWorkSheet("Summary");
WorkSheet detail  = workbook.CreateWorkSheet("Detail");

// Populate summary sheet ...
// Populate detail sheet ...

workbook.SaveAs(Server.MapPath("~/Exports/FullReport.xlsx"));
Dim workbook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)

Dim summary As WorkSheet = workbook.CreateWorkSheet("Summary")
Dim detail As WorkSheet = workbook.CreateWorkSheet("Detail")

' Populate summary sheet ...
' Populate detail sheet ...

workbook.SaveAs(Server.MapPath("~/Exports/FullReport.xlsx"))
$vbLabelText   $csharpLabel

IronXL ayrıca mevcut Excel dosyalarını okuma destekler, böylece markalama ve formatlama ile önceden oluşturulmuş bir şablon yükleyebilir, belirli hücrelere veri yerleştirebilir ve sonucu kaydedebilirsiniz – şablonda zaten mevcut olan grafikler, resimler ve stiller korunarak.

Daha zengin bir çıktı için,IronXLExcel formül desteği, koşullu biçimlendirme, grafik oluşturma ve görüntü ekleme sağlar. Bu yetenekler, IronXL öğreticileri bölümünde belgelenmiştir.

IronXL,EPPlusveClosedXMLile Nasıl Karşılaştırılır?

Özellik IronXL EPPlus ClosedXML
Ofis kurulumu gerekli Hayır Hayır Hayır
XLSX okuma ve yazma Evet Evet Evet
XLS (eski) destek Evet Hayır Hayır
CSV / TSV dışa aktarım Evet Hayır Kısmi
Grafik oluşturma API Evet Evet Sınırlı
Lisans modeli Süresiz + SaaS Poli form ticari olmayan MIT
.NET 10 destek Evet Evet Evet

EPPlus, 5. sürümde ticari bir lisansa geçerek, IronXL'i zaten ticari bir .NET kütüphanesi ekosistemine yatırım yapan ekipler için doğal bir alternatif haline getirdi. ClosedXMLMITlisanslı olarak kalırken, sınırlı grafik desteğine sahiptir. Doğru seçim, projenizin lisanslama kısıtlamalarına, ihtiyaç duyduğunuz Excel özelliklerine ve eski .xls formatı desteğinin bir gereklilik olup olmadığına bağlıdır.

IronXL Hangi Excel Formatlarını Destekler?

IronXL, .xlsx (Office Open XML), .xls (legacy BIFF8), .csv, ve .tsv formatlarını okur ve yazar. Excel dosya formatları arasında tek bir API çağrısıyla dönüşüm yapabilirsiniz -- ExcelFileFormat enum değerini WorkBook.Create'a geçirerek ya da mevcut bir dosyayı yükleyip farklı bir formatta kaydederek.

Sonraki Adımlarınız Neler?

Artık ASP.NET GridView verilerini Excel XLSX dosyalarına dışa aktarmak için üç üretim hazır paterne sahipsiniz:

  • Satır yineleme ihracatı -- bağlı bir GridView ile çalışan bir dışa aktarma için en hızlı yol
  • Başlık ve formatlama dışa aktarımı -- sunulabilir raporlar için sütun boyutlarını otomatik ayarlar ve kalın başlıklar ekler
  • DataTable'tan yürütülen dışa aktarma -- işlemden geçirilmiş kontrolü tamamen atlayarak sayfalı veya filtrelenmiş gridler için

Sonraki mantıklı adımlar şunlardır:

  1. Bir tarayıcı indirimi yanıtı ekleyin MemoryStream ve Response.BinaryWrite kullanarak, böylece kullanıcılar dosyayı sunucu tarafında bir kayıt yoluna ihtiyaç duymadan hemen alır.
  2. Hücre biçimlendirmesini uygulayın -- kalın başlıklar, arka plan renk dolguları ve sayı formatları -- IronXL biçimlendirme API'sini kullanarak.
  3. Özet ve ayrıntı verilerini, ilgili taraflara teslim edilen tek bir dosyada birleştirmek amacıyla çok sayfalı çalışma kitaplarını keşfetmek.
  4. Excel dosyalarını geri okuyun için DataTable nesnelerine dönüştürün ve IronXL'in okuma API'si kullanarak döngüsel içe/dışa aktarma iş akışlarına olanak tanıyın.
  5. Projenizdeki tüm özellikleri, tam kapasiteli bir deneme lisansında %@--CODE-14334--@@ ve %@--CODE-14335--@@ kullanarak test etmek için ücretsiz bir deneme başlatın.

Belge oluşturma hatları oluşturan ekipler için , IronPDF ile entegre edilir @--CODE-14336--@@ çıkarmak için çalışma kağıtlarını PDF'ye dışa aktarır. Iron Suite , IronXL, IronPDF, IronOCR, IronBarcode ve IronZIP'i bir araya getirerek uygun bir fiyatla sunar.

Sıkça Sorulan Sorular

GridView'den Excel'e aktarımda IronXL kullanmanın birincil amacı nedir?

IronXL esas olarak, yüksek performans ve C# uygulamalarında kolay entegrasyon sağlar, böylece verileri ASP.NET GridView'den Excel formatlarına (XLSX gibi) aktarmayı kolaylaştırır.

IronXL, GridView'den aktarma sırasında büyük veri kümeleriyle başa çıkabilir mi?

Evet, IronXL büyük veri kümelerini GridView'den Excel'e aktarım süreci sırasında verimli bir şekilde yönetmek üzere optimize edilmiştir.

IronXL kullanırken Excel çıktısını özelleştirmek mümkün mü?

IronXL ile, Excel çıktısının çeşitli yönlerini özelleştirebilirsiniz, örneğin formatlama, stillendirme ve ek veriler veya formüller dahil etme.

IronXL diğer kütüphanelerle GridView'den Excel'e aktarma konusunda nasıl karşılaştırılır?

IronXL, bazı diğer kütüphanelere kıyasla daha basit ve esnek bir yaklaşım sunar, modern Excel formatlarını ve doğrudan C# uygulamalarıyla entegrasyonu destekler.

IronXL, başka formatlara aktarmayı destekliyor mu?

Evet, IronXL çeşitli Excel formatlarına (XLS, CSV, TSV) dışa aktarmayı destekler ve farklı projeler için esneklik sağlar.

Bir projede IronXL kullanmanın ön koşulları nelerdir?

IronXL kullanmak için bir .NET ortamına ve C# projenize IronXL'yi NuGet aracılığıyla kurulmasına ihtiyacınız var.

IronXL, GridView verilerini eşzamanlı olarak dışa aktarabilir mi?

IronXL, GridView verilerini Excel dosyalarına eşzamanlı olarak aktarırken ana uygulama dizisini engellemeden işlem yapmaya olanak tanır.

GridView'den Excel'e veri aktarma için IronXL kullanmaya nasıl başlarım?

Başlamak için, GridView'den Excel'e veri aktarma işlemlerini ayarlama ve yürütme ile ilgili adım adım kılavuzlar sunan IronXL'in belgelerine ve örneklerine başvurun.

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