Pobierz plik Excel w ASP .NET C#: Eksportuj dane do XLSX, CSV i innych formatów
Implementacja funkcjonalności eksportu arkusza kalkulacyjnego jest powszechnym wymaganiem dla aplikacji internetowych klasy korporacyjnej, ale ręczy proces generowania i dostarczania tych plików często wprowadza znaczną złożoność techniczną. Programiści muszą często nawigować po niuansach zarządzania MemoryStream i konfigurować precyzyjne nagłówki treści HTTP, aby zapewnić spójne zachowanie przeglądarki i zapobiec korupcji danych.
Ten artykuł przeprowadza przez wszystko, co potrzebne do utworzenia i pobrania plików Excel w kontrolerach MVC ASP .NET C# przy użyciu biblioteki IronXL Omówimy eksport danych do prawdziwych plików Excel w formacie XLSX, strumieniowe przesyłanie plików CSV, konwertowanie przesłanych plików do ponownego eksportu i zwracanie pobrań plików do przeglądarki, wszystko bez instalowania Microsoft Office lub polegania na Excel Interop. Zainstaluj pakiet NuGet IronXL i rozpocznij bezpłatny okres próbny, aby śledzić przykłady kodu źródłowego.
Jak utworzyć i pobrać plik Excel z kontrolera?
Podstawowy wzorzec dla scenariusza pobierania plików Excel w ASP.NET Core obejmuje trzy kroki: utwórz skoroszyt, zapisz go do strumienia i zwróć strumień jako odpowiedź z plikiem. Poniższy kod pokazuje kompletną akcję kontrolera MVC, która tworzy plikXLSXod zera i pcha go do przeglądarki.
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
Plik wyjściowy w formacie Excel

Metoda WorkBook.Create generuje nowy dokument Excel, a CreateWorkSheet dodaje pierwszy arkusz do niego. Po wypełnieniu komórek wartościami metoda ToStream konwertuje cały skoroszyt na MemoryStream, żadne pliki tymczasowe nie dotykają dysku. Metoda zwracania File() na kontrolerze ustawia nagłówek content disposition na załącznik, co mówi przeglądarce, aby pobrać plik, zamiast próbować go renderować. Trzeci parametr kontroluje, jak nazwa pliku wygląda w oknie dialogowym pobierania użytkownika.
Ten wzorzec public IActionResult działa zarówno w projektach .NET Framework, jak i ASP.NET Core, co czyni go najlepszym podejściem dla aplikacji internetowych, które muszą eksportować dane do Excela.
Jak eksportować dane z bazy danych do arkusza kalkulacyjnego do pobrania?
Większość realnych scenariuszy obejmuje eksportowanie danych z tabeli bazy danych, a nie zakodowanych wartości. Wzorzec pozostałe ten sam: zapytaj dane, wypełnij arkusze i zwróć plik. Oto przykład, który symuluje pobieranie rekordów z bazy danych i zapisywanie ich do dokumentu Excel.
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
Wynik

W produkcji tablica zamówień pochodziłaby z zapytania Entity Framework Core, wywołania Dapper lub dowolnej warstwy dostępu do danych podłączonej poprzez ciąg połączenia do bazy danych. Pętla iteruje przez wyniki i zapisuje każdą wartość do odpowiednich komórek na arkuszu. Zauważ, jak nazwa pliku w ciągu znaków zawiera znacznik daty, mały szczegół, który oszczędza problemów, gdy użytkownicy wielokrotnie pobierają pliki.
System adresowania komórek IronXL'a (arkusz[$"A{row}"]) umożliwia czytelność, a API WorkBook zajmuje się całą trudnością budowania poprawnego plikuXLSXwewnętrznie. Dla bardziej skomplikowanych scenariuszy obejmujących formuły, stylizację lub wieloarkuszowe skoroszyty, to samo podejście skaluje się bezproblemowo.
Jak pobrać dane jako plikiCSVzamiast XLSX?
Czasami lekki plikCSVjest lepszym wyborem, szczególnie gdy dane będą przekazywane do innych systemów, baz danych lub narzędzi, które nie potrzebują pełnego zestawu funkcji w rzeczywistym pliku Excel. IronXL sprawia, że przełączanie się między formatami jest trywialne.
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
Plik wyjściowy CSV

Metoda ToCsvStream eksportuje pierwszy arkusz jako sformatowany jakoCSVMemoryStream. PlikiCSVświetnie nadają się do wymiany danych, ale pozbawiają formatowania, formuł i struktury wieloarkuszowej. Gdy potrzebujesz tych funkcji, trzymaj się formatu plikówXLSXpoprzez ToStream() lub ToXlsxStream(). Aby uzyskać głębszy wgląd w konwersje formatu, zapoznaj się z przewodnikiem po konwersji arkuszy kalkulacyjnych.
Jak ponownie eksportować przesłane pliki w innym formacie?
Typowy scenariusz aplikacji webowej obejmuje akceptowanie przesłanych plików od użytkowników i eksportowanie ich w innym formacie, powiedzmy, konwertowanie przesłaniaXLSna XLSX, lub produkowanie plikówCSVz skoroszytu zapisanego początkowo w formacie legacy.
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
Wyjście: KonwertowanieCSVdo formatu XLSX

Metoda WorkBook.Load przyjmuje MemoryStream, więc nie ma potrzeby zapisywania przesłanych plików na dysk wcześniej. Automatycznie wykrywa, czy źródło jest plikiem XLS,XLSXczyCSVi odpowiednio go przetwarza. StamtądToXlsxStream()generuje czysty nowy MemoryStream w nowoczesnym formacie XLSX, każdy bajt odpowiednio zestrukturyzowany. Jest to użyteczne do normalizacji zgłoszeń użytkowników przed dalszym przetwarzaniem lub przechowywaniem.
Jakie formaty plików mogą być eksportowane?
IronXL obsługuje eksport danych do wielu formatów arkuszy kalkulacyjnych i formatów wymiany danych. Poniższa tabela zawiera podsumowanie dostępnych opcji wyjściowych i ich najlepszych zastosowań.
|Format| Rozszerzenie pliku | Metoda strumieniowa | Najlepszy przykład zastosowania | |---|---|---|---| |XLSX|.xlsx|ToXlsxStream()| Nowoczesne arkusze kalkulacyjne Excel z formatowaniem i formułami | |XLS|.xls|ToXlsStream()| Kompatybilność ze starszymi systemami | |CSV|.csv|ToCsvStream()| Importowanie baz danych, potoki danych, lekki eksport | |XML|.xml|ToXmlStream()| Integracja systemów Enterprise | |JSON|.json|SaveAsJson()| Odpowiedzi Web API i wymiana danych | |HTML|.html|ExportToHtml()| Wyświetlanie danych z arkusza kalkulacyjnego na stronie internetowej |
Każda metoda strumienia zwraca obiekt MemoryStream, który można podłączyć bezpośrednio do pomocnika zwracającego File() w .NET Core. Alternatywa w postaci tablicy bajtów (ToByteArray()) jest również dostępna w sytuacjach, w których tablica bajtów jest wygodniejsza, na przykład podczas zapisywania do bazy danych blob lub dołączania do strumienia odpowiedzi e-mailowej. Wszystkie te metody są dostępne natychmiast po zainstalowaniu pakietu IronXL NuGet. Aby uzyskać pełny opis każdego formatu eksportu, zapoznaj się z dokumentacją dotyczącą eksportu do programu Excel.
Niezależnie od tego, czy celem jest pobieranie plików w formacieXLSXdla analityków biznesowych, eksportowanie plikówCSVdla inżynierów danych, czy generowanieXMLdo integracji korporacyjnej, IronXL zapewnia przejrzysty kod i niezawodne wyniki w aplikacjach .NET Core i .NET Framework. Chcesz w swoim kolejnym projekcie korzystać z gotowych do użycia eksportów arkuszy kalkulacyjnych? Pobierz bezpłatną licencję próbną lub zapoznaj się z opcjami licencyjnymi, aby rozpocząć pracę już dziś. Szczegółowe instrukcje konfiguracji można znaleźć w przewodniku IronXL dla początkujących.
Często Zadawane Pytania
Jak mogę pobrać plik Excel w ASP.NET Core przy użyciu języka C#?
Za pomocą IronXL można pobrać plik Excel w ASP.NET Core przy użyciu języka C#. IronXL umożliwia eksportowanie danych do różnych formatów, takich jak XLSX, CSV i XML, bezpośrednio z kontrolerów MVC. Można to efektywnie zarządzać za pomocą MemoryStream i metody File().
Jakie są zalety korzystania z IronXL do eksportowania plików Excel?
IronXL upraszcza proces eksportowania plików Excel poprzez efektywne zarządzanie MemoryStream i konfigurację nagłówków HTTP content-disposition. Zapewnia spójne działanie przeglądarki i zapobiega uszkodzeniu danych, dzięki czemu idealnie nadaje się do korporacyjnych aplikacji internetowych.
Do jakich formatów plików IronXL może eksportować dane?
IronXL może eksportować dane do wielu formatów plików, w tym XLSX, CSV i XML. Ta wszechstronność pomaga programistom płynnie radzić sobie z różnymi wymaganiami dotyczącymi eksportu danych.
Jakie wyzwania techniczne pomaga pokonać IronXL podczas eksportowania plików Excel?
IronXL pomaga pokonać wyzwania, takie jak zarządzanie strumieniem pamięci (MemoryStream) oraz konfiguracja precyzyjnych nagłówków HTTP content-disposition. Funkcje te zapewniają, że eksportowane pliki Excel są poprawnie obsługiwane przez przeglądarki i zapobiegają uszkodzeniu danych.
Czy IronXL może być używany do eksportowania danych z kontrolerów MVC?
Tak, IronXL może służyć do eksportowania danych z kontrolerów MVC. Zapewnia prosty sposób na wygenerowanie danych w formacie Excel, co czyni go praktycznym wyborem dla aplikacji internetowych .NET Core.
W jaki sposób IronXL usprawnia proces generowania plików Excel?
IronXL usprawnia ten proces poprzez automatyzację złożonych zadań, takich jak zarządzanie strumieniem pamięci (MemoryStream) i nagłówkami HTTP, pozwalając programistom skupić się na podstawowej funkcjonalności zamiast na technicznych zawiłościach.




