ASP .NET C# içinde Excel Dosyası İndirin: Verileri XLSX, CSV ve Daha Fazlasına Aktarın
Tablo dışa aktarma işlevselliği, kurumsal web uygulamaları için yaygın bir gereksinimdir, ancak bu dosyaların el ile oluşturulması ve teslim edilmesi genellikle önemli teknik karmaşıklıklar ortaya çıkarır. Geliştiriciler, tutarlı tarayıcı davranışını sağlamak ve veri bozulmasını önlemek için sık sık MemoryStream yönetiminin incelikleriyle karşılaşmalı ve doğru HTTP içerik-dağıtım başlıklarını yapılandırmalıdır.
Bu makale, IronXL kütüphanesini kullanarak, ASP.NET C# MVC denetleyicilerinde Excel dosyası oluşturma ve indirme ile ilgili gerekli her şeyi ele alır.XLSXformatında gerçek Excel dosyalarına veri dışa aktarımı,CSVdosyalarının akışını, yeniden dışa aktarma için yüklemelerin dönüştürülmesini ve tüm bunları Microsoft Office yüklemeden veya Excel Interop'a ihtiyaç duymadan tarayıcıya dosya indirmeleri olarak geri dönüştürmeyi kaplayacağız. IronXL NuGet paketini yükleyin ve kaynak kodu örnekleriyle birlikte takip etmek için ücretsiz bir deneme başlatın.
Bir Kontrolden Excel Dosyası Nasıl Oluşturulur ve İndirilir?
ASP.NET Core senaryosundaki herhangi bir Excel dosyası indirme için temel kalıp üç adımı içerir: çalışma kitabını oluşturma, bir akışa yazma ve akışı bir dosya yanıtı olarak döndürme. Aşağıdaki kod, sıfırdan birXLSXdosyası oluşturan ve tarayıcıya gönderilen bir MVC denetleyici eylemini gösterir.
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
// Export employee data as a downloadable Excel file
public IActionResult DownloadExcel()
{
// Create a new workbook and worksheet
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.CreateWorkSheet("Employees");
// Add header row with column names
worksheet["A1"].Value = "Name";
worksheet["B1"].Value = "Department";
worksheet["C1"].Value = "Salary";
// Populate cells with data values
worksheet["A2"].Value = "Alice Torres";
worksheet["B2"].Value = "Engineering";
worksheet["C2"].Value = 95000;
worksheet["A3"].Value = "James Park";
worksheet["B3"].Value = "Marketing";
worksheet["C3"].Value = 78000;
// Export workbook to a MemoryStream for download
var stream = workbook.ToStream();
string filename = "Employees.xlsx";
var content = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
// Return file to the browser with content disposition attachment
return File(stream, content, filename);
}
}
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class ReportController : Controller
{
// Export employee data as a downloadable Excel file
public IActionResult DownloadExcel()
{
// Create a new workbook and worksheet
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.CreateWorkSheet("Employees");
// Add header row with column names
worksheet["A1"].Value = "Name";
worksheet["B1"].Value = "Department";
worksheet["C1"].Value = "Salary";
// Populate cells with data values
worksheet["A2"].Value = "Alice Torres";
worksheet["B2"].Value = "Engineering";
worksheet["C2"].Value = 95000;
worksheet["A3"].Value = "James Park";
worksheet["B3"].Value = "Marketing";
worksheet["C3"].Value = 78000;
// Export workbook to a MemoryStream for download
var stream = workbook.ToStream();
string filename = "Employees.xlsx";
var content = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
// Return file to the browser with content disposition attachment
return File(stream, content, filename);
}
}
Imports IronXL
Imports Microsoft.AspNetCore.Mvc
Public Class ReportController
Inherits Controller
' Export employee data as a downloadable Excel file
Public Function DownloadExcel() As IActionResult
' Create a new workbook and worksheet
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet = workbook.CreateWorkSheet("Employees")
' Add header row with column names
worksheet("A1").Value = "Name"
worksheet("B1").Value = "Department"
worksheet("C1").Value = "Salary"
' Populate cells with data values
worksheet("A2").Value = "Alice Torres"
worksheet("B2").Value = "Engineering"
worksheet("C2").Value = 95000
worksheet("A3").Value = "James Park"
worksheet("B3").Value = "Marketing"
worksheet("C3").Value = 78000
' Export workbook to a MemoryStream for download
Dim stream = workbook.ToStream()
Dim filename As String = "Employees.xlsx"
Dim content = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
' Return file to the browser with content disposition attachment
Return File(stream, content, filename)
End Function
End Class
Excel Dosya Çıkışı

WorkBook.Create metodu yeni bir Excel belgesi oluşturur ve CreateWorkSheet ilk çalışma sayfasını ekler. Hücrelere değerler girdikten sonra, ToStream metodu tüm çalışma kitabını bir MemoryStream haline dönüştürür, geçici dosyalar diske dokunmaz. Denetleyici üzerindeki File() dönüş yöntemi içerik dağıtım başlığını ek ekleme olarak ayarlar, bu da tarayıcıya dosyayı indirilmesini değil, render etmeye çalışılmasını söyler. Üçüncü parametre, dosya adının kullanıcının indirme diyalog kutusunda nasıl görüneceğini kontrol eder.
Bu public IActionResult kalıbı .NET Framework ve ASP.NET Core projelerinde benzer şekilde çalışır, web uygulamalarının Excel'e veri aktarımı yapması gerektiğinde tercihe edilen yaklaşım haline getirir.
Veritabanı Verileri İndirilebilir Bir Elektronik Tabloya Nasıl Dışa Aktarılır?
Gerçek dünya senaryolarının çoğu, sabit kodlanmış değerler yerine bir veritabanı tablosundan veri dışa aktarmayı içerir. Bu kalıp aynı kalır, veriyi sorgulayın, çalışma sayfalarını doldurun ve dosyayı döndürün. İşte bir veritabanından kayıtları çekip bir Excel belgesine yazma işlemini simüle eden bir örnek.
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class DataExportController : Controller
{
// Export database records to an xlsx file for download
public IActionResult ExportDatabaseReport()
{
// Simulate a database query returning order records
var orders = new[]
{
new { OrderId = 1001, Customer = "Acme Corp", Total = 4500.00m },
new { OrderId = 1002, Customer = "Globex Inc", Total = 12300.50m },
new { OrderId = 1003, Customer = "Initech LLC", Total = 890.75m },
};
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.CreateWorkSheet("Orders");
// Write headers
worksheet["A1"].Value = "Order ID";
worksheet["B1"].Value = "Customer";
worksheet["C1"].Value = "Total";
// Write each row of data from the query results
for (int i = 0; i < orders.Length; i++)
{
int row = i + 2;
worksheet[$"A{row}"].Value = orders[i].OrderId;
worksheet[$"B{row}"].Value = orders[i].Customer;
worksheet[$"C{row}"].Value = orders[i].Total;
}
var stream = workbook.ToStream();
string filename = $"OrderReport-{DateTime.Now:yyyyMMdd}.xlsx";
return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
}
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class DataExportController : Controller
{
// Export database records to an xlsx file for download
public IActionResult ExportDatabaseReport()
{
// Simulate a database query returning order records
var orders = new[]
{
new { OrderId = 1001, Customer = "Acme Corp", Total = 4500.00m },
new { OrderId = 1002, Customer = "Globex Inc", Total = 12300.50m },
new { OrderId = 1003, Customer = "Initech LLC", Total = 890.75m },
};
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.CreateWorkSheet("Orders");
// Write headers
worksheet["A1"].Value = "Order ID";
worksheet["B1"].Value = "Customer";
worksheet["C1"].Value = "Total";
// Write each row of data from the query results
for (int i = 0; i < orders.Length; i++)
{
int row = i + 2;
worksheet[$"A{row}"].Value = orders[i].OrderId;
worksheet[$"B{row}"].Value = orders[i].Customer;
worksheet[$"C{row}"].Value = orders[i].Total;
}
var stream = workbook.ToStream();
string filename = $"OrderReport-{DateTime.Now:yyyyMMdd}.xlsx";
return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
}
Imports IronXL
Imports Microsoft.AspNetCore.Mvc
Public Class DataExportController
Inherits Controller
' Export database records to an xlsx file for download
Public Function ExportDatabaseReport() As IActionResult
' Simulate a database query returning order records
Dim orders = New() {
New With {.OrderId = 1001, .Customer = "Acme Corp", .Total = 4500.0D},
New With {.OrderId = 1002, .Customer = "Globex Inc", .Total = 12300.5D},
New With {.OrderId = 1003, .Customer = "Initech LLC", .Total = 890.75D}
}
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet = workbook.CreateWorkSheet("Orders")
' Write headers
worksheet("A1").Value = "Order ID"
worksheet("B1").Value = "Customer"
worksheet("C1").Value = "Total"
' Write each row of data from the query results
For i As Integer = 0 To orders.Length - 1
Dim row As Integer = i + 2
worksheet($"A{row}").Value = orders(i).OrderId
worksheet($"B{row}").Value = orders(i).Customer
worksheet($"C{row}").Value = orders(i).Total
Next
Dim stream = workbook.ToStream()
Dim filename As String = $"OrderReport-{DateTime.Now:yyyyMMdd}.xlsx"
Return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename)
End Function
End Class
Çıktı

Üretimde, siparişler dizisi, bir Entity Framework Core sorgusundan, bir Dapper çağrısından veya bir bağlantı dizgisi aracılığıyla veritabanına bağlanan herhangi bir veri erişim katmanından gelir. Döngü, sonuçlar üzerinden iterasyon yapar ve her değeri, çalışma sayfasındaki doğru hücrelere yazar. Dosya adında bir tarih damgasının nasıl eklendiğine dikkat edin, kullanıcılar dosyaları tekrar tekrar indirirken baş ağrılarından kurtarır.
IronXL'in hücre adresleme sistemi (çalışma sayfası[$"A{row}"]) işleri okunabilir tutar ve WorkBook API sıfırdan geçerli birXLSXdosyası oluşturmanın tüm ağır işini içten halleder. Formüller, stil veya çoklu çalışma sayfası çalışma kitaplarını içeren daha karmaşık senaryolar için aynı yaklaşım düzgün bir şekilde ölçeklenir.
XLSXYerineCSVDosyaları Olarak Veri Nasıl İndirilir?
Bazen hafif birCSVdosyası, özellikle daha az özellikli bir gerçek Excel dosyasına gerek olmayan diğer sistemler, veritabanları veya araçlara veri aktarılırken daha iyi bir seçim olabilir. IronXL, formatlar arasında geçiş yapmayı son derece kolay hale getirir.
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class CsvController : Controller
{
// Export data as aCSVfile download
public IActionResult ExportCsv()
{
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.CreateWorkSheet("Products");
worksheet["A1"].Value = "SKU";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Price";
worksheet["A2"].Value = "WDG-001";
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 29.99;
// Convert toCSVstream instead of XLSX
var stream = workbook.ToCsvStream();
string filename = "Products.csv";
return File(stream, "text/csv", filename);
}
}
using IronXL;
using Microsoft.AspNetCore.Mvc;
public class CsvController : Controller
{
// Export data as aCSVfile download
public IActionResult ExportCsv()
{
var workbook = WorkBook.Create(ExcelFileFormat.XLSX);
var worksheet = workbook.CreateWorkSheet("Products");
worksheet["A1"].Value = "SKU";
worksheet["B1"].Value = "Product";
worksheet["C1"].Value = "Price";
worksheet["A2"].Value = "WDG-001";
worksheet["B2"].Value = "Widget Pro";
worksheet["C2"].Value = 29.99;
// Convert toCSVstream instead of XLSX
var stream = workbook.ToCsvStream();
string filename = "Products.csv";
return File(stream, "text/csv", filename);
}
}
Imports IronXL
Imports Microsoft.AspNetCore.Mvc
Public Class CsvController
Inherits Controller
' Export data as a CSV file download
Public Function ExportCsv() As IActionResult
Dim workbook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim worksheet = workbook.CreateWorkSheet("Products")
worksheet("A1").Value = "SKU"
worksheet("B1").Value = "Product"
worksheet("C1").Value = "Price"
worksheet("A2").Value = "WDG-001"
worksheet("B2").Value = "Widget Pro"
worksheet("C2").Value = 29.99
' Convert to CSV stream instead of XLSX
Dim stream = workbook.ToCsvStream()
Dim filename As String = "Products.csv"
Return File(stream, "text/csv", filename)
End Function
End Class
CSVDosya Çıkışı

ToCsvStream metodu, ilk çalışma sayfasınıCSVformatında bir MemoryStream olarak dışa aktarır.CSVdosyaları veri değişimi için harikadır, ancak herhangi bir biçimlendirme, formül veya çoklu sayfa yapısını çıkarır. Bu özelliklere ihtiyaçınız olduğunda, ToStream() veyaToXlsxStream()aracılığıylaXLSXdosya formatında kalın.Formatdönüşümleri hakkında daha derin bir bakış için, elektronik tablo dönüşüm kılavuzuna bakın.
Bir Yükleme Farklı BirFormatOlarak Nasıl Yeniden Dışa Aktarılır?
Yaygın bir web uygulama senaryosu, kullanıcılardan yüklenen dosyaları kabul edip onları başka bir formata dışa aktarmayı içerir, örneğin, birXLSyüklemeyi XLSX'e dönüştürmek veya başlangıçta eski bir formatta kaydedilmiş bir çalışma kitabındanCSVdosyaları üretmek.
public IActionResult ConvertUpload(IFormFile upload)
{
using var memoryStream = new MemoryStream();
upload.CopyTo(memoryStream);
memoryStream.Position = 0;
// Load uploaded Excel file from the stream
var workbook = WorkBook.Load(memoryStream);
// Re-export asXLSXregardless of the original file extension or file type
var stream = workbook.ToXlsxStream();
string filename = Path.GetFileNameWithoutExtension(upload.FileName) + ".xlsx";
return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
public IActionResult ConvertUpload(IFormFile upload)
{
using var memoryStream = new MemoryStream();
upload.CopyTo(memoryStream);
memoryStream.Position = 0;
// Load uploaded Excel file from the stream
var workbook = WorkBook.Load(memoryStream);
// Re-export asXLSXregardless of the original file extension or file type
var stream = workbook.ToXlsxStream();
string filename = Path.GetFileNameWithoutExtension(upload.FileName) + ".xlsx";
return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename);
}
Imports Microsoft.AspNetCore.Http
Imports Microsoft.AspNetCore.Mvc
Imports System.IO
Public Function ConvertUpload(upload As IFormFile) As IActionResult
Using memoryStream As New MemoryStream()
upload.CopyTo(memoryStream)
memoryStream.Position = 0
' Load uploaded Excel file from the stream
Dim workbook = WorkBook.Load(memoryStream)
' Re-export as XLSX regardless of the original file extension or file type
Dim stream = workbook.ToXlsxStream()
Dim filename As String = Path.GetFileNameWithoutExtension(upload.FileName) & ".xlsx"
Return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename)
End Using
End Function
Çıkış: CSV'yiXLSXFormatına Dönüştürme

WorkBook.Load metodu bir MemoryStream kabul eder, böylece yüklenen dosyaları öncelikle diske kaydetmeye gerek yoktur. Kaynağın XLS,XLSXveyaCSVdosyası olup olmadığını otomatik algılar ve buna göre ayrıştırır. Oradan,ToXlsxStream()modernXLSXformatında temiz yeni bir MemoryStream oluşturur, her byte doğru yapılandırılmıştır. Bu, kullanıcı gönderimlerini daha fazla işlem veya depolama öncesinde normalleştirmek için kullanışlıdır.
Hangi Dosya Formatları Dışa Aktarılabilir?
IronXL, verileri birden fazla elektronik tablo ve veri değişim formatına dışa aktarmayı destekler. Aşağıdaki tablo mevcut çıktı seçeneklerini ve en iyi kullanım durumlarını özetlemektedir.
|Format| Dosya Uzantısı | Akış Metodu | En İyi Kullanım Durumu | | --- | --- | --- | --- | |XLSX|.xlsx|ToXlsxStream()| Formatlama ve formüller ile modern Excel elektronik tabloları | |XLS|.xls|ToXlsStream()| Eski sistem uyumluluğu | |CSV|.csv|ToCsvStream()| Veritabanı aktarımları, veri hatları, hafif dışa aktarma | |XML|.xml|ToXmlStream()|Kurum sistemi entegrasyonu| |JSON|.json|SaveAsJson()|Web API yanitlari ve veri degisimi| |HTML|.html|ExportToHtml()|Elektronik tablo verilerinin web sayfasinda görüntülenmesi|
Her akış yöntemi, ASP.NET Core'un File() yanıt yardımcısına doğrudan takılan bir MemoryStream döndürür. Byte[]'ın daha uygun olduğu durumlar için (örneğin, blob veritabanına kaydederken veya bir e-posta yanıt akışına eklerken), byte dizi alternatifi (ToByteArray()) de mevcut. IronXL NuGet paketi yüklendikten hemen sonra bu yöntemlerin tümü kullanılabilir. Her bir dışa aktarma formatının tam bir yol gösterimi için, Excel'e dışa aktarma dokümantasyonuna bakın.
Hedef, iş analistleri içinXLSXformatında dosyaları indirmek, veri mühendisleri içinCSVdosyalarını dışa aktarmak veya kurum entegrasyonu içinXMLoluşturmak olsun, IronXL kodu temiz tutar ve çıktı .NET Core ve .NET Framework uygulamalarında güvenilir olur. Bir sonraki projenizde elektronik tablo dışa aktarımlarını göndermeye hazır mısınız? Ücretsiz deneme lisansı edinin veya lisanslama seçeneklerini keşfedin ve bugün başlayın. IronXL başlarken kılavuzuna adım adım kurulum talimatları için başvurun.
Sıkça Sorulan Sorular
C# kullanarak ASP.NET Core'da bir Excel dosyasini nasil indirebilirim?
IronXL kullanarak C# ile ASP.NET Core'da bir Excel dosyasi indirebilirsiniz. IronXL, verileri XLSX, CSV ve XML gibi çeşitli formatlara doğrudan MVC denetleyicilerinden aktarmanizi saglar. Bu işlem, MemoryStream ve File() metodu kullanilarak etkin bir şekilde yönetilebilir.
Excel dosyalarini aktarmak için IronXL kullanmanin faydalari nelerdir?
IronXL, MemoryStream'i etkili bir şekilde yöneterek ve HTTP content-disposition başlıklarını ayarlayarak Excel dosyalarinin aktarimini kolaylastirir. Bu, tarayici davranisini sürekli hale getirir ve veri hasarinin onune gecer, kurumsal web uygulamalari için ideal hale getirir.
IronXL hangi dosya formatlarina veri aktarabilir?
IronXL, veri aktarimi için XLSX, CSV ve XML gibi birden çok dosya formatini destekler. Bu çok yonluluk, geliştiricilerin farkli veri aktarimi gereksinimlerini sorunsuz bir şekilde ele almasina yardimci olur.
Excel dosyalarini aktarirken IronXL hangi teknik zorluklari asmaya yardimci olur?
IronXL, MemoryStream yönetimi ve kesin HTTP content-disposition basliklarinin konfigurasyonu gibi zorluklarin ustesinden gelinir. Bu özellikler, disara aktariilan Excel dosyalarinin tarayicilar tarafindan doğru bir şekilde islenmesini saglar ve veri hasarini onler.
IronXL, MVC denetleyicilerinden veri aktarmak için kullanilabilir mi?
Evet, IronXL, MVC denetleyicilerinden veri aktarmak için kullanilabilir. Verileri Excel formatinda çıkarmanin doğrudan bir yolunu sunar, bu da ASP.NET Core web uygulamalari için pratik bir seçim yapar.
IronXL, Excel dosyalari oluşturma süreçini nasil geliştirir?
IronXL, MemoryStream ve HTTP basliklari yönetimi gibi karmaşık görevleri otomatiklestirerek, geliştiricilerin teknik incelemeler yerine temel işlevselliklere odaklanmalarına olanak tanır.




