Baixe arquivos do Excel em .NET C#: Exporte dados para XLSX, CSV e muito mais.
Implementar funcionalidade de exportação de planilhas é um requisito comum para aplicativos web corporativos, no entanto, o processo manual de gerar e entregar esses arquivos frequentemente introduz complexidade técnica significativa. Os desenvolvedores precisam frequentemente navegar pelas nuances de gerenciamento de MemoryStream e configurar cabeçalhos de content-disposition HTTP precisos para garantir um comportamento consistente do navegador e evitar a corrupção de dados.
Este artigo percorre tudo o que é necessário para criar e baixar um arquivo Excel em controladores ASP .NET C# MVC usando a biblioteca IronXL. Vamos abordar a exportação de dados para arquivos Excel reais no formato XLSX, o streaming de arquivos CSV, a conversão de uploads para reexportação e o retorno de downloads de arquivos para o navegador, tudo sem instalar o Microsoft Office ou depender do Excel Interop. Instale o pacote IronXL NuGet e inicie uma avaliação gratuita para acompanhar os exemplos de código-fonte.
Como Criar e Baixar um Arquivo Excel de um Controlador?
O padrão principal para qualquer cenário de download de arquivo Excel no ASP.NET Core envolve três etapas: criar a planilha, escrevê-la para um stream, e retornar o stream como uma resposta de arquivo. O código a seguir mostra uma ação de controlador MVC completa que constrói um arquivoXLSXdo zero e o envia para o navegador.
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
Arquivo Excel de Saída

O método WorkBook.Create gera um novo documento Excel, e o CreateWorkSheet adiciona a primeira planilha a ele. Após preencher as células com valores, o método ToStream converte toda a planilha em um MemoryStream, sem que arquivos temporários toquem no disco. O método de retorno File() no controlador define o cabeçalho de content disposition para attachment, que instrui o navegador a baixar o arquivo em vez de tentar renderizá-lo. O terceiro parâmetro controla como o nome do arquivo aparece na janela de download do usuário.
Este padrão public IActionResult funciona em projetos .NET Framework e ASP.NET Core, sendo a abordagem ideal para aplicativos web que precisam exportar dados para Excel.
Como Exportar Dados do Banco de Dados para uma Planilha Baixável?
A maioria dos cenários do mundo real envolve exportar dados de uma tabela de banco de dados em vez de valores codificados. O padrão permanece o mesmo, consultar os dados, preencher as planilhas e retornar o arquivo. Aqui está um exemplo que simula a obtenção de registros de um banco de dados e escrevê-los em um documento 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
Saída

Na produção, o array de pedidos viria de uma consulta Entity Framework Core, uma chamada Dapper, ou qualquer camada de acesso a dados conectada via uma string de conexão ao banco de dados. O loop itera sobre os resultados e escreve cada valor nas células corretas na planilha. Observe como o nome do arquivo de string inclui uma data, um pequeno detalhe que evita dores de cabeça quando os usuários baixam arquivos repetidamente.
O sistema de endereçamento de células do IronXL (planilha[$"A{linha}"]) mantém tudo legível, e a API WorkBook cuida de todo o trabalho pesado de construir um arquivoXLSXválido internamente. Para cenários mais complexos envolvendo fórmulas, estilo ou planilhas múltiplas, a mesma abordagem escala de maneira limpa.
Como Baixar Dados Como ArquivosCSVem vez de XLSX?
Às vezes, um arquivoCSVleve é a melhor escolha, particularmente ao alimentar dados em outros sistemas, bancos de dados ou ferramentas que não precisam do rico conjunto de recursos de um arquivo Excel real. O IronXL torna a troca entre formatos trivial.
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
ArquivoCSVde saída

O método ToCsvStream exporta a primeira planilha como um MemoryStream formatado em CSV. Os arquivosCSVfuncionam bem para troca de dados, mas eles eliminam qualquer formatação, fórmulas e estrutura de várias planilhas. Quando você precisa desses recursos, mantenha-se com o formato de arquivoXLSXvia ToStream() ou ToXlsxStream(). Para uma visão mais profunda de conversões de formato, consulte o guia de conversão de planilhas.
Como Re-Exportar um Upload em um Formato Diferente?
Um cenário comum de aplicativos web envolve aceitar arquivos carregados pelos usuários e exportá-los em outro formato, por exemplo, converter um uploadXLSparaXLSXou produzir arquivosCSVa partir de uma planilha originalmente salva em um formato legado.
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
Saída: ConvertendoCSVpara Formato XLSX

O método WorkBook.Load aceita um MemoryStream, portanto, não há necessidade de salvar os arquivos enviados no disco primeiro. Ele detecta automaticamente se a origem é um arquivo XLS,XLSXouCSVe faz a interpretação adequadamente. A partir daí,ToXlsxStream()gera um novo MemoryStream limpo no formato moderno XLSX, cada byte devidamente estruturado. Isso é útil para normalizar as submissões dos usuários antes de processamento ou armazenamento adicional.
Quais Formatos de Arquivo Podem Ser Exportados?
O IronXL suporta a exportação de dados para múltiplos formatos de planilhas e de intercâmbio de dados. A tabela abaixo resume as opções de saída disponíveis e seus melhores usos.
| Formato | Extensão de Arquivo | Método de Stream | Melhor Caso de Uso |
|---|---|---|---|
| XLSX | .xlsx | ToXlsxStream() | Planilhas modernas do Excel com formatação e fórmulas |
| XLS | .xls | ToXlsStream() | Compatibilidade com sistemas legados |
| CSV | .csv | ToCsvStream() | Importação em banco de dados, pipelines de dados, exportação leve |
| XML | .xml | ToXmlStream() | Integração de sistema empresarial |
| JSON | .json | SaveAsJson() | Respostas de API Web e troca de dados |
| HTML | .html | ExportToHtml() | Exibição de dados de planilhas em páginas da Web |
Cada método de stream retorna um MemoryStream que se conecta diretamente ao auxiliar de retorno File() do ASP.NET Core. A alternativa do array de bytes (ToByteArray()) também está disponível para cenários em que um byte[] seja mais conveniente, por exemplo, ao salvar em um banco de dados blob ou anexar a um stream de resposta de email. Todos esses métodos estão disponíveis imediatamente após a instalação do pacote NuGet IronXL. Para um passo a passo completo de cada formato de exportação, consulte a documentação de exportação para Excel.
Se o objetivo é baixar arquivos no formatoXLSXpara analistas de negócios, exportar arquivosCSVpara engenheiros de dados ou gerarXMLpara integração empresarial, o IronXL mantém o código limpo e a saída confiável em aplicações .NET Core e .NET Framework. Pronto para enviar exportações de planilhas no seu próximo projeto? Obtenha uma licença de avaliação gratuita ou explore as opções de licenciamento para começar hoje. Para instruções passo a passo de configuração, consulte o guia de introdução do IronXL.
Perguntas frequentes
Como posso baixar um arquivo Excel em ASP.NET Core usando C#?
É possível baixar um arquivo Excel no ASP.NET Core usando C# com o IronXL. O IronXL permite exportar dados para diversos formatos, como XLSX, CSV e XML, diretamente de controladores MVC. Isso pode ser gerenciado de forma eficiente usando MemoryStream e o método File().
Quais são os benefícios de usar o IronXL para exportar arquivos do Excel?
O IronXL simplifica o processo de exportação de arquivos Excel, gerenciando o MemoryStream de forma eficaz e configurando os cabeçalhos HTTP Content-Disposition. Ele garante um comportamento consistente no navegador e evita a corrupção de dados, tornando-o ideal para aplicações web corporativas.
Em quais formatos de arquivo o IronXL pode exportar dados?
O IronXL pode exportar dados para vários formatos de arquivo, incluindo XLSX, CSV e XML. Essa versatilidade ajuda os desenvolvedores a lidar com diferentes requisitos de exportação de dados sem problemas.
Quais desafios técnicos o IronXL ajuda a superar na exportação de arquivos do Excel?
O IronXL ajuda a superar desafios como o gerenciamento de MemoryStream e a configuração precisa de cabeçalhos HTTP Content-Disposition. Esses recursos garantem que os arquivos Excel exportados sejam tratados corretamente pelos navegadores e evitam a corrupção de dados.
O IronXL pode ser usado para exportar dados de controladores MVC?
Sim, o IronXL pode ser usado para exportar dados de controladores MVC. Ele oferece uma maneira simples de gerar dados em formato Excel, tornando-se uma opção prática para aplicações web ASP.NET Core .
Como o IronXL melhora o processo de geração de arquivos Excel?
O IronXL aprimora o processo automatizando tarefas complexas, como o gerenciamento de MemoryStream e cabeçalhos HTTP, permitindo que os desenvolvedores se concentrem na funcionalidade principal em vez de detalhes técnicos.



