
Excel-Dateien in .NET C# herunterladen: Daten nach XLSX, CSV und mehr exportieren
Die Implementierung einer Exportfunktion für Tabellenkalkulationen ist eine häufige Anforderung für Webanwendungen in Enterprise , doch der manuelle Prozess der Generierung und Bereitstellung dieser Dateien führt oft zu erheblicher technischer Komplexität. Entwickler müssen sich häufig mit den Feinheiten der MemoryStream-Verwaltung auseinandersetzen und präzise HTTP-Content-Disposition-Header konfigurieren, um ein konsistentes Browserverhalten zu gewährleisten und Datenbeschädigung zu verhindern.
Dieser Artikel behandelt alles, was benötigt wird, um in ASP .NET C# MVC-Controllern Excel-Dateien zu erstellen und herunterzuladen, mithilfe der IronXL-Bibliothek. Wir zeigen Ihnen, wie Sie Daten in echte Excel-Dateien im XLSX-Format exportieren, CSV-Dateien streamen, Uploads für den erneuten Export konvertieren und heruntergeladene Dateien im Browser anzeigen lassen – alles ohne Microsoft Office zu installieren oder Excel Interop zu verwenden. Installieren Sie das IronXL NuGet Paket und starten Sie eine kostenlose Testphase , um die Quellcodebeispiele nachzuvollziehen.
Wie erstellt und lädt man eine Excel-Datei von einem Controller herunter?
Das Kernmuster für jeden Download-Excel-Datei in ASP.NET Core-Szenario umfasst drei Schritte: Erstellen Sie das Arbeitsbuch, schreiben Sie es in einen Stream und geben Sie den Stream als Dateiantwort zurück. Der folgende Code zeigt eine vollständige MVC-Controller-Aktion, die eine XLSX-Datei von Grund auf neu erstellt und an den Browser sendet.
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 ClassAusgabedatei im Excel-Format

Die Methode WorkBook.Create erzeugt ein neues Excel-Dokument, und CreateWorkSheet fügt das erste Arbeitsblatt hinzu. Nach dem Befüllen der Zellen mit Werten wandelt die ToStream- Methode die gesamte Arbeitsmappe in einen MemoryStream um; es werden keine temporären Dateien auf der Festplatte gespeichert. Die Rückgabemethode File() des Controllers setzt den Content Disposition Header auf attachment, wodurch der Browser angewiesen wird, die Datei herunterzuladen, anstatt sie darzustellen. Der dritte Parameter steuert, wie der Dateiname im Download-Dialog des Benutzers angezeigt wird.
Dieses öffentliche IActionResult-Muster funktioniert sowohl in .NET Framework als auch in ASP.NET Core Projekten und ist daher die bevorzugte Methode für Webanwendungen, die Daten nach Excel exportieren müssen.
Wie exportiere ich Datenbankdaten in eine herunterladbare Tabellenkalkulation?
In den meisten realen Anwendungsfällen geht es darum, Daten aus einer Datenbanktabelle zu exportieren, anstatt fest codierte Werte zu verwenden. Das Vorgehen bleibt gleich: Daten abfragen, Tabellenblätter füllen und die Datei zurückgeben. Hier ist ein Beispiel, das das Abrufen von Datensätzen aus einer Datenbank und deren Schreiben in ein Excel-Dokument simuliert.
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 ClassAusgabe

Im Produktionsbetrieb würde das Orders-Array aus einer Entity Framework Core-Abfrage, einem Dapper -Aufruf oder einer beliebigen Datenzugriffsschicht stammen, die über eine Verbindungszeichenfolge mit der Datenbank verbunden ist. Die Schleife durchläuft die Ergebnisse und schreibt jeden Wert in die entsprechenden Zellen des Arbeitsblatts. Beachten Sie, dass der Dateiname einen Zeitstempel enthält – ein kleines Detail, das viel Ärger erspart, wenn Benutzer Dateien wiederholt herunterladen.
Das Zelladressierungssystem von IronXL (worksheet[$"A{row}"]) sorgt für Lesbarkeit, und die WorkBook API übernimmt intern die gesamte aufwendige Arbeit des Erstellens einer gültigen XLSX-Datei. Auch für komplexere Szenarien mit Formeln, Formatierungen oder mehrteiligen Arbeitsmappen lässt sich der gleiche Ansatz problemlos skalieren.
Wie lade ich Daten als CSV-Dateien anstatt als XLSX-Dateien herunter?
Manchmal ist eine schlanke CSV-Datei die bessere Wahl, insbesondere wenn Daten in andere Systeme, Datenbanken oder Tools eingespeist werden, die nicht den umfangreichen Funktionsumfang einer Excel-Datei benötigen. IronXL macht den Wechsel zwischen verschiedenen Formaten kinderleicht.
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 ClassAusgabe CSV-Datei

Die Methode ToCsvStream exportiert das erste Arbeitsblatt als CSV-formatierten MemoryStream . CSV-Dateien eignen sich hervorragend für den Datenaustausch, allerdings gehen dabei Formatierungen, Formeln und die Struktur mit mehreren Tabellenblättern verloren. Wenn Sie diese Funktionen benötigen, bleiben Sie beim XLSX-Dateiformat und verwenden Sie dazu ToStream() oder ToXlsxStream(). Für einen detaillierteren Einblick in Formatkonvertierungen konsultieren Sie bitte den Leitfaden zur Tabellenkonvertierung .
Wie exportiere ich einen Upload in einem anderen Format?
Ein typisches Szenario für Webanwendungen besteht darin, von Benutzern hochgeladene Dateien entgegenzunehmen und sie in einem anderen Formatzu exportieren, beispielsweise eine XLS-Datei inXLSXzu konvertieren oder CSV-Dateien aus einer Arbeitsmappe zu erstellen, die ursprünglich in einem älteren Formatgespeichert wurde.
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 FunctionAusgabe: Konvertierung vonCSVin das XLSX-Format

Die Methode WorkBook.Load akzeptiert einen MemoryStream, sodass hochgeladene Dateien nicht vorher auf der Festplatte gespeichert werden müssen. Sie erkennt automatisch, ob es sich bei der Quelle um eine XLS-, XLSX- oder CSV-Datei handelt und verarbeitet diese entsprechend. Von dort aus erzeugtToXlsxStream()einen neuen, sauberen MemoryStream im modernen XLSX-Format, wobei jedes Byte korrekt strukturiert ist. Dies ist nützlich, um Benutzereingaben vor der Weiterverarbeitung oder Speicherung zu normalisieren.
Welche Dateiformate können exportiert werden?
IronXL unterstützt den Export von Daten in verschiedene Tabellenkalkulations- und Datenaustauschformate. Die folgende Tabelle fasst die verfügbaren Ausgabeoptionen und ihre besten Anwendungsbereiche zusammen.
| Format| Dateierweiterung | Stream-Methode | Bester Anwendungsfall | | ---| ---| ---| ---| |XLSX|.xlsx|ToXlsxStream()| Moderne Excel-Tabellen mit Formatierung und Formeln | |XLS|.xls|ToXlsStream()| Kompatibilität mit älteren Systemen | |CSV|.csv|ToCsvStream()| Datenbankimporte, Datenpipelines, schlanker Export | |XML|.xml|ToXmlStream()| Integration von Enterprise | |JSON|.json|SaveAsJson()| Web-API-Antworten und Datenaustausch | |HTML|.html|ExportToHtml()| Webseitendarstellung von Tabellendaten |
Jede Stream-Methode gibt einen MemoryStream zurück, der direkt in den File()-Rückgabehelfer von ASP.NET Core eingebunden wird. Die Alternative mit einem Byte-Array (ToByteArray()) steht ebenfalls zur Verfügung, beispielsweise beim Speichern in einer Blob-Datenbank oder beim Anhängen an einen E-Mail-Antwortstrom. Alle diese Methoden stehen unmittelbar nach der Installation des IronXL NuGet Pakets zur Verfügung. Eine vollständige Beschreibung der einzelnen Exportformate finden Sie in der Dokumentation zum Export nach Excel .
Egal ob es darum geht, Dateien im XLSX-Format für Business-Analysten herunterzuladen, CSV-Dateien für Dateningenieure zu exportieren oderXMLfür die Enterprise zu generieren – IronXL sorgt für sauberen Code und zuverlässige Ergebnisse in .NET Core und .NET Framework Anwendungen. Sind Sie bereit, in Ihrem nächsten Projekt Tabellenkalkulationsexporte zu versenden? Sichern Sie sich eine kostenlose Testlizenz oder informieren Sie sich über die verschiedenen Lizenzoptionen, um noch heute loszulegen. Eine Schritt-für-Schritt-Anleitung zur Einrichtung finden Sie im IronXL Leitfaden für Einsteiger .

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.
Verwandte Artikel



