Ir para o conteúdo do rodapé
USANDO O IRONXL

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.

NuGet Instalar com NuGet

PM >  Install-Package IronXl.Excel

Confira o IronXL no NuGet para uma instalação rápida. Com mais de 10 milhões de downloads, ele está transformando o desenvolvimento de PDFs com C#. Você também pode baixar a DLL .

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);
    }
}
$vbLabelText   $csharpLabel

Arquivo Excel de Saída

Baixar arquivo Excel em ASP .NET C#: Exportar dados para XLSX,CSVe mais: Imagem 1 - exemplo de saída para download de arquivo Excel em ASP .NET C#

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);
    }
}
$vbLabelText   $csharpLabel

Saída

Baixar arquivo Excel em ASP .NET C#: Exportar dados para XLSX,CSVe mais: Imagem 2 - Saída para exportação de dados de um banco de dados para um arquivo Excel

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);
    }
}
$vbLabelText   $csharpLabel

ArquivoCSVde saída

Baixar arquivo Excel em ASP .NET C#: Exportar dados para XLSX,CSVe mais: Imagem 3 - Dados baixados como um arquivoCSVem vez de Excel

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);
}
$vbLabelText   $csharpLabel

Saída: ConvertendoCSVpara Formato XLSX

Baixar arquivo Excel em ASP .NET C#: Exportar dados para XLSX,CSVe mais: Imagem 4 - Exemplo de saída para conversão do nosso arquivoCSVpara o 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.

Jordi Bardia
Engenheiro de Software
Jordi é extremamente proficiente em Python, C# e C++, e quando não está utilizando suas habilidades na Iron Software, dedica-se à programação de jogos. Compartilhando as responsabilidades por testes, desenvolvimento e pesquisa de produtos, Jordi agrega imenso valor à melhoria contínua dos produtos. Essa experiência diversificada o mantém ...
Leia mais

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me