Altbilgi içeriğine atla
IRONXL KULLANARAK

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

Verileri ASP.NET GridView'dan Excel Dosyasına Aktarma

ASP.NET GridView'ini bir Excel XLSX dosyasına C# dilinde aktarmak için IronXL yükleyebilir, WorkBook oluşturabilir, GridView satırları üzerinde döngü yapabilir, her hücre değerini ilgili çalışma sayfası pozisyonuna yazarak disk veya HTTP yanıt akışına kaydedebilirsiniz. Bu yaklaşım, sunucuda Microsoft Office yüklemesi gerektirmez ve .NET Framework, .NET Core, ve .NET 5 ile .NET 10 web uygulamaları arasında güvenilir bir şekilde çalışır.

GridView verilerini Excel'e aktarmak, kurumsal ASP.NET Web Forms projelerinde standart bir gereksinimdir. Kullanıcıların, tablolu verileri tarayıcıdan çıkararak raporlama, çevrimdışı analiz ve arşivleme için elektron tablolara aktarılması gerekir. Zorluk, web sunucu ortamlarında çalışmayan Office Interop bağımlılıklarını tanıtmadan sunucu tarafı GridView kontrolü ile düzgün bir şekilde yapılandırılmış .xlsx dosyası arasında köprü kurmaktır.

Bu kılavuz, minimum satır-satır ihracından, sütun otomatik boyutlandırmalı başlık-artı-veri ihracına ve tam olarak oluşturulmuş HTML'yi atlayan DataTable-yönlü bir ihracata kadar üç aşamalı ihracat desenleri boyunca sizi yönlendirir. Her bir örnek, C# üst düzey ifade uyumlu kod veIronXLAPI'sini kullanır.

IronXL'i bir ASP.NET Projesine Nasıl Kurarsınız?

Visual Studio'da Paket Yöneticisi Konsolu'nu açın ve çalıştırın:

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

Alternatif olarak, Solution Explorer da projeye sağ tıklayın, Manage NuGet Packages seçeneğini seçin, IronXL arayın ve Install tıklayın. NuGet, tüm dolaylı bağımlılıkları otomatik olarak çözümler.

Paketi yükledikten sonra, kod-arkası 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 sonrası ile .NET Core 3.1 ve .NET 5 ile .NET 10 desteğini içerir. Sunucuda Office yüklemesi veya COM kaydı gerektirmez. Tam API dokümantasyonu IronXL nesne referansında mevcuttur.

Hangi NuGet Paket Kimliğini Kullanmalısınız?

Doğru paket kimliği IronXL (miras kalan bir takma ad olan IronXl.Excel değil). Kurulumdan sonra IronXL.dll derlemesi otomatik olarak referans alınır. Yüklü sürümü, Packages düğümünü Solution Explorer'da kontrol ederek veya proje dizininden dotnet list package çalıştırarak doğrulayabilirsiniz.

IronXLASP.NET Core Web Uygulamalarında Çalışır mı?

Evet. Aynı API, ASP.NET Web Forms ve ASP.NET Core (MVC veya Razor Pages) projelerinde çalışır. Çekirdek projelerde, sunucu tarafı dosya yolları oluştururken Server.MapPath yerine IWebHostEnvironment.WebRootPath ya da Path.Combine(Directory.GetCurrentDirectory(), "Exports") kullanın.

GridView'i Excel Dosyasına Nasıl Aktarırsınız?

En basit ihracat deseni, GridView içindeki her işlenmiş satır üzerinde yineleme yapar ve her hücrenin metnini karşılık gelen Excel çalışma sayfası hücresine kopyalar. ASPX işaretinde 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" /> butonu ekleyin. Her iki kontrolü kod-arkasında erişilebilir kılan runat="server" özniteliğidir.

Kodun arka tarafı, ilk yüklemede örnek verileri bağlar ve düğme tıklandığında veri 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ı boyunca ilerler; iç döngü (j) sütunlar boyunca ilerler. 0. satırdaki başlığın üzerine yazılmaması için veri hücreleri için i + 1 satır indeksi kullanılır.

IronXL'i Excel Interop Yerine Kullanmanızın Nedeni Nedir?

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, .xlsx dosyalarını Open XML paketleri olarak doğrudan okuyup yazar -- COM, Office veya Marshal.ReleaseComObject şablonu gereksinimi yoktur. Bu onu, Office'in bulunmadığı IIS, Azure App Service, Docker ve diğer sunucu ortamlarında güvenilir yapar.

XLSX İndirmeleri için Doğru MIME Türü Nedir?

Tarayıcının dosya-kaydet iletişim kutusunu sunması yerine verileri satır içi sunması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 üstbilgisi ekleyin.

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

Temel örnek, HeaderRow.Cells 'den çıkarılan başlıkları yazar, ancak bir üretim ihracatı, verilerin Excel'de manuel ayarlamalar gerektirmeden okunabilir olması için her sütunu 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), hücre içerik uzunluğuna göre optimal sütun genişliğini hesaplaması için IronXL'yi bilgilendirir, Excel masaüstü uygulamasındaki Format > AutoFit Column Width işlemiyle yansıtılır. Tüm veriler yazıldıktan sonra bir döngüde çağırmak, her satır sonrasında çağırmaktan daha verimlidir çünkü o noktada son içerik bilinir.

Ek stil seçenekleri için -- kalın başlıklar, arkaplan renkleri, sayı formatları -- IronXL hücre stil kılavuzunu keşfedin. Ayrıca, hücreleri birleştirerek birden çok sütun üzerine uzanan rapor başlıkları oluşturabilirsiniz.

Başlık Hücrelerine Kalın Biçimlendirmeyi Nasıl Uygularsınız?

IStyle nesnesini worksheet["A1"].Style tarafından döndürülen (ya da bir aralık) kullanın. Değerleri yazmadan önce veya sonra Font.Bold = true ayarlayın -- stil hücre içeriğinden bağımsızdı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 boyuttaki aralıklara eşit şekilde uygulanır. Stil özelliklerinin tam listesini görmek için IronXL stil API referansına bakın.

Verileri Doğrudan DataTable'den Nasıl İhraç Edersiniz?

İşlenmiş GridView satırları üzerinde yineleme yapmak, ihracatınızı kontrolün mevcut görsel durumuna bağlar ve bu durum sayfalama, sıralama ve sütun görünürlüğü ayarlarından etkilenebilir. Altında bulunan DataTable in ViewState 'de saklanmış olan ihracat, ızgaranın nasıl yapılandırıldığına bakılmaksızın deterministik 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 adları, orijinal veri şemasını yansıtan DataTable.Columns[i].ColumnName 'den gelir, GridView şablonunda uygulanan herhangi bir görüntüleme adı geçersiz kılmasından daha ziyade. Hücre değerleri, sütun dizinini kullanarak DataRow nesnelerden alınır, her değer string ye dönüştürülür, SetCellValue yi tatmin etmek için.

Bu desen, GridView sayfalama kullandığında özellikle değerlidir -- yalnızca şimdiki görünür sayfadaki satırları döndüren gvEmployees.Rows iterasyonu yerine, tam DataTable den okuma, her kaydı dışa aktarır.

Büyük DataTable Dışa Aktarımlarıyla Ne Olur?

IronXL, büyük Excel veri kümeleri için etkin bir şekilde çalışma kitabı verilerini akış halinde yazar. 100.000'den fazla satırı aşan ihracatlar için, iç içe döngüde ayrı hücreleri ayarlamak yerine tek bir çalışma sayfası işlemi içinde SetCellValue çağrılarını yığınlamayı düşünün. Çalışma kitabını MemoryStream yerine de yazabilir ve tüm dosyayı sunucu RAM'inde tutmamak için Response akışına kademeli olarak yazabilirsiniz.

İhracat Sırasında Hatalarla Nasıl Baş Edilir?

Üretim ihracat işleyicileri,IronXLişlemlerini bir catch bloğuna sarmalı ve bir şeyler ters gittiğinde kullanıcıya açıklayıcı bir mesaj döndürmelidir. Yaygın arıza modları arasında ~/Exports/ dizininin eksikliği, dosya izin hataları ve oturum zaman aşımından sonra ViewState 'in 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ı disk kaydetmek yerine doğrudan tarayıcı indirimi olarak teslim eden web uygulamaları için, içerik türü ve konum üstbilgilerini ayarladıktan sonra Response.BinaryWrite kullanın veya Response.OutputStream yazın. ~/Exports/ dizininin mevcut olduğundan ve IIS uygulama havuzu kimliğinin yazma izni bulunduğundan emin olun.

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

workbook.SaveAs(filePath) 'i akış tabanlı bir yanıt ile 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, diske geçici bir dosya yazmaktan kaçınır. MemoryStream sunucuda tahsis edilir, byte[] 'e seri hale getirilir ve doğrudan istemciye gönderilir. Response.End() çağrısı, yanıtı yazar ve ikili verilerden sonra ek sayfa işaretlerinin eklenmesini engeller.

Birden Fazla Sayfa veya Gelişmiş Çalışma Kitapları Nasıl İhraç Edilir?

Tek bir WorkBook birden fazla sayfa içerebilir, bu bazen birden fazla GridView'u -- ya da aynı veri kümesini farklı ayrıntı düzeylerinde -- tek bir dosyaya aktarmanız gerektiğinde kullanışlıdır. Her sekme için bir kez workbook.CreateWorkSheet(name) çağrısı yapı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, mevcut Excel dosyalarını okumayı da destekler, böylece markalama ve formatlamalı bir hazır şablon yükleyebilir, özgül hücrelere veri ekleyip sonucu kaydedebilir ve templatete zaten var olan grafikler, resimler ve stilleri koruyabilirsiniz.

Daha da zengin çıktılar için,IronXLExcel formülü desteği, koşullu biçimlendirme, grafik oluşturma ve resim gömme sağlar. Bu yetenekler, IronXL eğitimler bölümü'nde belgelendirilmiştir.

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

Özellik IronXL EPPlus ClosedXML
Office yüklemesi gerekli Hayır Hayır Hayır
XLSX okuma ve yazma Evet Evet Evet
XLS (eski) desteği Evet Hayır Hayır
CSV / TSV dışa aktarma Evet Hayır Kısmen
Grafik oluşturma API'si Evet Evet Sınırlı
Lisans modeli Sürekli + SaaS Polyform ticari olmayan MIT
.NET 10 desteği Evet Evet Evet

EPPlus, 5. sürümde ticari lisansa geçti, bu da IronXL'i, ticari .NET kütüphane ekosistemine yatırım yapan ekipler için doğal bir alternatif haline getirdi. ClosedXML MIT-lisanslı kalmaya devam ediyor, ancak sınırlı grafik desteği var. Doğru seçim, projenizin lisans sınırlamalarına, ihtiyaç duyduğunuz Excel özelliklerine ve eski .xls format desteğinin bir gereklilik olup olmadığına bağlıdır.

IronXLHangi Excel Formatlarını Destekler?

IronXL, .xlsx (Office Open XML), .xls (miras BIFF8), .csv ve .tsv formatlarını okur ve yazar. Excel dosya formatları arasında bir API çağrısı ile ExcelFileFormat enum değeri WorkBook.Create veya mevcut bir dosyayı yükleyerek ve farklı bir formatta kaydederek dönüştürebilirsiniz.

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

Artık IronXL'i kullanarak ASP.NET GridView verilerini Excel XLSX dosyalarına ihraç etmenize olanak sağlayan üç üretim hazır deseniniz var:

  • Satır yineleme ihraç -- bağlı bir GridView 'dan çalışan bir ihracata hızlı yolu
  • Başlık ve formatlama ihracatı -- sunulabilir raporlar için otomatik sütun boyutlandırmayı ve kalın başlıkları ekler
  • DataTable güdümlü ihracat -- sayfa veya filtrelenmiş gridler için işlenmiş kontrolü tamamen atlar

Mantıklı bir sonraki adımlar:

  1. Kullanıcıların dosyayı hemen aldığından emin olmak için sunucu tarafı bir kaydetme yolu olmadan MemoryStream ve Response.BinaryWrite kullanarak tarayıcı indirmesi yanıtı ekleyin.
  2. Hücre stilini uygulayın -- kalın başlıklar, arkaplan renk dolumları ve sayı formatlarını -- IronXL formatlama API'si kullanarak.
  3. Çok sayfalı çalışma kitaplarını keşfedin bir dosyada özet ve detay verilerini paydaşlara teslim ederek birleştirin.
  4. Yuvarlak seyahat ithalat/ihracat iş akışları için IronXL'in okuma API'sini kullanarak Excel dosyalarını geri DataTable nesnelerine okuyun.
  5. Projenizdeki tüm özellikleri bir tam yetenekli deneme lisansı ile test etmek için ironsoftware.com/csharp/excel/ adresinde ücretsiz bir denemeye başlayın.

Belge oluşturma boru hatları oluşturan ekipler için, IronPDF, çalışma tablolarını doğrudan PDF'ye dışa aktarmak içinIronXLile entegre oluyor. Iron Suite, IronXL'i IronPDF, IronOCR, IronBarcode, ve IronZIP ile indirgenmiş birleşik bir fiyata paketler.

Sıkça Sorulan Sorular

GridView'i Excel'e dışa aktarmak için IronXL kullanmanın birincil amacı nedir?

IronXL, yüksek performans ve C# uygulamalarında kolay entegrasyonu sağlayarak bir ASP.NET GridView'den Excel biçimlerine, özellikle XLSX'e veri aktarma sürecini kolaylaştırmak için öncelikli olarak kullanılır.

IronXL, GridView'den dışa aktarılırken büyük veri kümelerini işleyebilir mi?

Evet, IronXL, GridView'den Excel'e dışa aktarma sürecinde büyük veri kümelerini verimli bir şekilde işlemek için optimize edilmiştir ve hız ve performansı korur.

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

IronXL ile, Excel çıktısının çeşitli yönlerini, formatlama ve stil dahil, özelleştirebilir ve dışa aktarılmış dosyada ek veri veya formüller ekleyebilirsiniz.

IronXL diğer kütüphanelerle GridView'i Excel'e dışa 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 biçimleri için destek sağlar ve C# uygulamalarıyla doğrudan entegrasyon olanağı tanır.

IronXL, XLSX dışındaki biçimlere dışa aktarma desteği sağlıyor mu?

Evet, IronXL, farklı proje gereksinimleri için çeşitli Excel biçimlerine, Excel XLS, CSV ve TSV dahil, dışa aktarma desteği sağlar.

Bir projede IronXL kullanmanın ön şartları nelerdir?

.NET ortamına ihtiyaçınız var ve C# projenizde IronXL'i NuGet üzerinden kurabilirsiniz.

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

IronXL, ana uygulama iş parçacığını engellemeden verileri Excel dosyasına dışa aktarılmasına olanak tanıyan eşzamanlı olmayan işlemleri destekler.

IronXL kullanarak GridView verilerini Excel'e aktarmaya nasıl başlayabilirim?

Başlamak için, IronXL'in dokümantasyonuna ve GridView'den Excel'e veri dışa aktarma işlemlerini kurma ve yürütme konusunda adım adım rehberlik sunan örneklere başvurun.

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