Ir para o conteúdo do rodapé
COMPARAR COM OUTROS COMPONENTES

Exportação de ASP.NET para Excel: Comparação entre IronXL , ClosedXML e EPPlus

Exportar dados para Excel é um requisito padrão em aplicações web ASP.NET Core. Se você está gerando relatórios de vendas, permitindo que usuários baixem conteúdos do GridView ou produzindo arquivos CSV a partir de consultas de banco de dados, a abordagem que você escolhe determina se o arquivo resultante será aberto sem problemas no Microsoft Excel ou acionará avisos de formato. Este artigo compara os métodos mais comuns de exportação para Excel disponíveis para desenvolvedores C# -- transmissão tradicional baseada em HTML e soluções de bibliotecas modernas, incluindo IronXL, XML fechado e EPPlus -- para que você possa selecionar a ferramenta certa para seu projeto.

Comece seu teste gratuito para ver como o IronXL lida com a geração de arquivos Excel em aplicações ASP.NET Core.

Quais São os Métodos Comuns de Exportação de Dados para Excel no ASP.NET Core?

Os desenvolvedores ASP.NET Core têm vários caminhos disponíveis ao adicionar funcionalidade de exportação para Excel. Cada abordagem difere na qualidade do arquivo de saída, no esforço necessário para implementá-la e nas implicações de licença para projetos comerciais.

Transmissão tradicional de tipo MIME é a técnica mais antiga. O servidor define o cabeçalho Content-Type da resposta para application/vnd.ms-excel e escreve uma tabela HTML no fluxo de saída. O navegador interpreta isso como um download de Excel, mas o arquivo contém marcação HTML em vez de dados de planilha genuínos. O Microsoft Excel detecta a incompatibilidade e exibe um aviso de formato antes de abrir o arquivo. Este método não pode suportar fórmulas, colunas tipadas ou formatação de células adequada.

Soluções baseadas em bibliotecas adicionam um pacote NuGet que constrói arquivos XLSX genuínos usando o formato Open XML definido pela Microsoft. As opções incluem IronXL, XML fechado e EPPlus. Todos os três produzem arquivos Excel válidos que abrem sem avisos, suportam formatação a nível de célula e funcionam com .NET Core. A documentação oficial .NET para downloads de arquivos cobre os mecanismos subjacentes do ASP.NET Core usados por todas essas abordagens.

A tabela abaixo resume as principais diferenças:

Comparação de bibliotecas de exportação para Excel: matriz de recursos
Recurso Tipo MIME / HTML XML fechado EPPlus IronXL
Saída genuína XLSX Não Sim Sim Sim
Suporte a arquivos CSV Manual Limitado Limitado Nativo
Abre sem aviso no Excel Não Sim Sim Sim
Suporte a fórmulas Não Sim Sim Sim
Exportação JSON e XML Não Não Não Sim
Licença comercial N / D MIT Polyform Comercial
Suporte ao .NET Core Sim Sim Sim Sim

Como Você Instala o IronXL em um Projeto ASP.NET Core?

Antes de escrever qualquer código de exportação, adicione o IronXL ao seu projeto através do Gerenciador de Pacotes NuGet ou da CLI do .NET. O IronXL não tem dependência do Microsoft Office ou COM interop, portanto a instalação é simples em qualquer sistema operacional suportado pelo .NET.

dotnet add package IronXl.Excel
dotnet add package IronXl.Excel
SHELL

Alternativamente, use o Console do Gerenciador de Pacotes no Visual Studio:

Install-Package IronXl.Excel
Install-Package IronXl.Excel
SHELL

Depois que o pacote é instalado, adicione using IronXL; a qualquer classe de controlador ou serviço que necessite gerar arquivos Excel. Não é necessária configuração adicional para cenários básicos de exportação. Para opções de licenciamento e implantação, visite a página de licenciamento do IronXL.

Como Funciona a Abordagem Tradicional de Exportação do GridView?

Em WebForms legados e alguns padrões mais antigos de MVC, os desenvolvedores exportavam dados do GridView renderizando-os como HTML e transmitindo-os para o navegador com um cabeçalho de Content-Type enganoso. A aplicação chama Response.AddHeader para definir o nome do arquivo e escreve a saída HTML diretamente.

// Traditional approach -- exports HTML disguised as Excel
public void ExportToExcel(object sender, EventArgs e)
{
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("content-disposition", "attachment;filename=Report.xls");
    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
    // Render grid content as HTML
    DataGrid1.RenderControl(htmlTextWriter);
    Response.Write(stringWriter.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
    // Required to prevent server form rendering errors
}
// Traditional approach -- exports HTML disguised as Excel
public void ExportToExcel(object sender, EventArgs e)
{
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("content-disposition", "attachment;filename=Report.xls");
    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
    // Render grid content as HTML
    DataGrid1.RenderControl(htmlTextWriter);
    Response.Write(stringWriter.ToString());
    Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
    // Required to prevent server form rendering errors
}
$vbLabelText   $csharpLabel

Saída Legada

ASP.NET Exportar para Excel: Melhor Comparação de Ferramentas para Desenvolvedores C#: Imagem 1 - Saída de exportação de Excel legada

Este método requer substituir VerifyRenderingInServerForm para contornar a validação no lado do servidor. O arquivo gerado contém HTML em vez de dados genuínos de planilha, portanto, o Microsoft Excel exibe um aviso de formato quando o usuário o abre. A saída não pode suportar fórmulas de planilha, colunas de dados digitados ou formatação de nível de célula. Para qualquer novo desenvolvimento ASP.NET Core, esse padrão deve ser evitado em favor de uma biblioteca adequada de Excel.

Como o IronXL Simplifica a Geração de Arquivos Excel no ASP.NET Core?

IronXL fornece uma API para criar arquivos XLSX genuínos sem necessidade do Microsoft Office ou de interoperabilidade COM. A biblioteca constrói objetos de workbook inteiramente em código gerenciado, para que funcione no Linux, macOS e Windows sem dependências adicionais.

O exemplo a seguir cria um workbook, preenche uma planilha com dados de vendas, aplica formatação em negrito à linha de cabeçalho e transmite o arquivo para o navegador:

using IronXL;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpPost]
    public IActionResult ExportReport()
    {
        // Create workbook and worksheet
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Add header row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Quantity";
        worksheet["C1"].Value = "Revenue";

        // Populate data rows
        worksheet["A2"].Value = "Widget A";
        worksheet["B2"].Value = 150;
        worksheet["C2"].Value = 4500.00;
        worksheet["A3"].Value = "Widget B";
        worksheet["B3"].Value = 230;
        worksheet["C3"].Value = 6900.00;

        // Apply bold formatting to headers
        var headerRange = worksheet["A1:C1"];
        headerRange.Style.Font.Bold = true;

        // Stream file to browser
        byte[] fileBytes = workbook.ToByteArray();
        string filename = $"SalesReport_{DateTime.Nãow:yyyyMMdd}.xlsx";
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            filename);
    }
}
using IronXL;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpPost]
    public IActionResult ExportReport()
    {
        // Create workbook and worksheet
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Sales Data");

        // Add header row
        worksheet["A1"].Value = "Product";
        worksheet["B1"].Value = "Quantity";
        worksheet["C1"].Value = "Revenue";

        // Populate data rows
        worksheet["A2"].Value = "Widget A";
        worksheet["B2"].Value = 150;
        worksheet["C2"].Value = 4500.00;
        worksheet["A3"].Value = "Widget B";
        worksheet["B3"].Value = 230;
        worksheet["C3"].Value = 6900.00;

        // Apply bold formatting to headers
        var headerRange = worksheet["A1:C1"];
        headerRange.Style.Font.Bold = true;

        // Stream file to browser
        byte[] fileBytes = workbook.ToByteArray();
        string filename = $"SalesReport_{DateTime.Nãow:yyyyMMdd}.xlsx";
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            filename);
    }
}
$vbLabelText   $csharpLabel

Saída IronXL

ASP.NET Exportar para Excel: Melhor Comparação de Ferramentas para Desenvolvedores C#: Imagem 2 - Saída de exportação de Excel usando IronXL

WorkBook.Create constrói um novo documento Excel na memória. CreateWorkSheet adiciona uma aba nomeada que os usuários veem na parte inferior da janela Excel. Os valores das células são atribuídos usando notação de intervalo no estilo Excel ("A1", "B2"), que a maioria dos desenvolvedores C# considera legível e sustentável.

O método ToByteArray() converte o caderno finalizado em um array de bytes, que o método de resposta File() do ASP.NET Core transmite diretamente para o navegador do usuário com o tipo MIME e cabeçalhos de disposição de conteúdo corretos. O arquivo baixado abre no Excel sem nenhum aviso de formato.

O IronXL também suporta a exportação para o formato CSV através do método SaveAsCsv:

// Export as CSV instead of XLSX
workbook.SaveAsCsv("output.csv");
// Export as CSV instead of XLSX
workbook.SaveAsCsv("output.csv");
$vbLabelText   $csharpLabel

Para cenários onde você precisa exportar dados da planilha como JSON ou XML, o IronXL fornece os métodos SaveAsJson e SaveAsXml — capacidades não disponíveis no XML fechado ou EPPlus. Você pode encontrar padrões adicionais nos exemplos de código do IronXL e na referência da API.

Como o IronXL Lida com Integração de DataTable e Banco de Dados?

Muitas aplicações ASP.NET Core buscam dados do SQL Server ou de outro banco de dados relacional antes de exportá-los. IronXL oferece suporte de primeira linha para carregar um DataTable diretamente em uma planilha, eliminando a necessidade de iterar linhas manualmente.

O exemplo abaixo consulta um banco de dados usando ADO.NET e preenche uma planilha Excel com o DataTable resultante:

using IronXL;
using System.Data;
using System.Data.SqlClient;
using Microsoft.AspNetCore.Mvc;

public class ReportController : Controller
{
    private readonly string _connectionString;

    public ReportController(IConfiguration config)
    {
        _connectionString = config.GetConnectionString("DefaultConnection");
    }

    [HttpGet]
    public IActionResult DownloadReport()
    {
        DataTable table = new DataTable();

        using (SqlConnection connection = new SqlConnection(_connectionString))
        {
            string query = "SELECT OrderId, CustomerName, Total, OrderDate FROM Orders";
            using SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
            adapter.Fill(table);
        }

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Orders");

        // Write column headers from DataTable schema
        for (int col = 0; col < table.Columns.Count; col++)
        {
            worksheet[0, col].Value = table.Columns[col].ColumnName;
        }

        // Write data rows
        for (int row = 0; row < table.Rows.Count; row++)
        {
            for (int col = 0; col < table.Columns.Count; col++)
            {
                worksheet[row + 1, col].Value = table.Rows[row][col].ToString();
            }
        }

        byte[] fileBytes = workbook.ToByteArray();
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "Orders.xlsx");
    }
}
using IronXL;
using System.Data;
using System.Data.SqlClient;
using Microsoft.AspNetCore.Mvc;

public class ReportController : Controller
{
    private readonly string _connectionString;

    public ReportController(IConfiguration config)
    {
        _connectionString = config.GetConnectionString("DefaultConnection");
    }

    [HttpGet]
    public IActionResult DownloadReport()
    {
        DataTable table = new DataTable();

        using (SqlConnection connection = new SqlConnection(_connectionString))
        {
            string query = "SELECT OrderId, CustomerName, Total, OrderDate FROM Orders";
            using SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
            adapter.Fill(table);
        }

        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Orders");

        // Write column headers from DataTable schema
        for (int col = 0; col < table.Columns.Count; col++)
        {
            worksheet[0, col].Value = table.Columns[col].ColumnName;
        }

        // Write data rows
        for (int row = 0; row < table.Rows.Count; row++)
        {
            for (int col = 0; col < table.Columns.Count; col++)
            {
                worksheet[row + 1, col].Value = table.Rows[row][col].ToString();
            }
        }

        byte[] fileBytes = workbook.ToByteArray();
        return File(fileBytes,
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "Orders.xlsx");
    }
}
$vbLabelText   $csharpLabel

Esse padrão mantém o controlador enxuto e testável. A consulta ao banco de dados e a construção do workbook são claramente separadas, tornando simples a troca da fonte de dados ou a adição de planilhas adicionais para dados de resumo. Para orientação sobre como ler arquivos Excel existentes em um DataTable, veja o guia do IronXL sobre ler arquivos Excel.

Como o XML fechado e o EPPlus se Comparam?

XML fechado envolve o SDK Open XML da Microsoft com uma API acessível. Instale-o a partir do NuGet:

Install-Package XML fechado
Install-Package XML fechado
SHELL

O exemplo a seguir mostra uma ação típica de exportação do XML fechado:

using XML fechado.Excel;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpGet]
    public IActionResult ExportWithXML fechado()
    {
        using var workbook = new XLWorkbook();
        var worksheet = workbook.AddWorksheet("Data");
        worksheet.Cell(1, 1).Value = "Name";
        worksheet.Cell(1, 2).Value = "Amount";
        worksheet.Cell(2, 1).Value = "Alpha";
        worksheet.Cell(2, 2).Value = 1200;

        using var stream = new MemoryStream();
        workbook.SaveAs(stream);
        return File(stream.ToArray(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx");
    }
}
using XML fechado.Excel;
using Microsoft.AspNetCore.Mvc;

public class ExportController : Controller
{
    [HttpGet]
    public IActionResult ExportWithXML fechado()
    {
        using var workbook = new XLWorkbook();
        var worksheet = workbook.AddWorksheet("Data");
        worksheet.Cell(1, 1).Value = "Name";
        worksheet.Cell(1, 2).Value = "Amount";
        worksheet.Cell(2, 1).Value = "Alpha";
        worksheet.Cell(2, 2).Value = 1200;

        using var stream = new MemoryStream();
        workbook.SaveAs(stream);
        return File(stream.ToArray(),
            "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
            "export.xlsx");
    }
}
$vbLabelText   $csharpLabel

Saída XML fechado

ASP.NET Exportar para Excel: Melhor Comparação de Ferramentas para Desenvolvedores C#: Imagem 3 - Saída de exportação de Excel usando XML fechado

O XML fechado utiliza endereçamento de células baseado em inteiros (Cell(row, col)) ao invés da notação de string de intervalo usada pelo IronXL. Ambas as abordagens produzem arquivos XLSX válidos. XML fechado é lançado sob a licença MIT, tornando-o adequado para projetos de código aberto sem preocupações de licenciamento comercial. O [repositório GitHub do XML fechado](https://github.com/XML fechado/XML fechado) fornece rastreamento de problemas e exemplos contribuídos pela comunidade.

EPPlus oferece funcionalidade semelhante sob sua licença Polyform Nãon-Comercial para uso não comercial, com uma licença comercial necessária para implantações de produção. Consulte o resumo de licença do EPPlus antes de usá-lo em um produto comercial. EPPlus e XML fechado produzem ambos arquivos Excel válidos, mas nenhum oferece exportação nativa para CSV, JSON ou XML da maneira que o IronXL faz.

A tabela abaixo compara capacidades específicas relevantes para aplicações de produção ASP.NET Core:

Comparação detalhada de capacidades para projetos de produção ASP.NET Core
Capacidade IronXL XML fechado EPPlus
Exportação para CSV, JSON e XML Nativo Não disponível Não disponível
Integração com DataTable Sim Sim Sim
Suporte técnico Incluído com a licença Apenas para a comunidade Nível pago
Dependência do Microsoft Office Nenhum Nenhum Nenhum
Multiplataforma (.NET no Linux) Sim Sim Sim
Tipo de licença Comercial MIT Polyform / Comercial

Como Escolher a Biblioteca Certa para o Seu Projeto?

Selecionar a biblioteca correta de exportação de Excel depende de três fatores: os formatos de saída necessários, as restrições de licenciamento do seu projeto e se você precisa de suporte profissional.

Escolha o IronXL quando sua aplicação precisar de saída em vários formatos (XLSX, CSV, JSON, XML), quando você estiver construindo um produto comercial que requer um canal de suporte garantido ou quando precisar de recursos avançados do Excel como avaliação de fórmulas, formatação de células ou geração de gráficos. A documentação do IronXL cobre detalhadamente toda a superfície da API, e a equipe de suporte responde diretamente aos titulares de licença. Consulte o blog do IronXL para padrões adicionais e tutoriais.

Escolha o XML fechado quando seu projeto for de código aberto ou não-comercial e exigir apenas saída XLSX. A licença MIT não impõe restrições à redistribuição, e a API está bem documentada através de recursos da comunidade.

Escolha o EPPlus quando uma base de código existente já usar o EPPlus e migrar para outra biblioteca custaria mais do que adquirir uma licença comercial.

Para equipes que estão avaliando o IronXL em relação às suas alternativas, a licença de teste do IronXL permite testes com todos os recursos antes de se comprometer com uma compra. Exemplos adicionais de código para leitura e escrita de arquivos Excel estão disponíveis na página de exemplos do IronXL.

Quais são os seus próximos passos?

Agora que você revisou as abordagens de exportação de Excel disponíveis para ASP.NET Core, você pode seguir os passos seguintes para avançar:

  • Instale o IronXL usando dotnet add package IronXl.Excel e percorra o guia de introdução para criar seu primeiro caderno.
  • Compare padrões de código revisando a página de exemplos do IronXL para cenários que correspondam ao seu caso de uso, como exportação de banco de dados, workbooks multi-folhas ou relatórios formatados.
  • Avalie o licenciamento visitando a página de licenciamento do IronXL para entender as opções para desenvolvimento, staging e implantações de produção.
  • Explore formatos adicionais testando os métodos SaveAsCsv, SaveAsJson e SaveAsXml se sua aplicação precisar exportar dados em múltiplos formatos a partir da mesma base de código.
  • Faça a migração do código legado identificando quaisquer padrões existentes Response.ContentType = "application/vnd.ms-excel" na sua solução e substituindo-os pela criação de cadernos do IronXL, eliminando avisos de formato para seus usuários.

Para implantações em produção, compre uma licença para desbloquear suporte profissional e garantir a conformidade com os termos da licença do IronXL.

!{--010011000100100101000010010100100100000101010010010110010101111101000111010001010101010100010111110101001101010100010000010101001001010100010001010100010001011111010101110100100 101010100010010000101111101010000010100100111101000100010101010100001101010100010111110101010001010010010010010010010100000101001100010111110100001001001100010011110100001101001011--}

Perguntas frequentes

Quais são os principais recursos do IronXL para exportação para o Excel no ASP.NET Core?

O IronXL gera arquivos XLSX, CSV, JSON e XML genuínos sem a necessidade do Microsoft Office. Ele fornece uma API intuitiva para gerenciamento de pastas de trabalho e planilhas, formatação de células, avaliação de fórmulas e integração com DataTable, tudo dentro de código gerenciado .NET padrão.

Como o IronXL se compara ao ClosedXML para projetos ASP.NET Core?

O IronXL suporta múltiplos formatos de exportação (XLSX, CSV, JSON, XML) e inclui suporte profissional com uma licença comercial. O ClosedXML gera arquivos XLSX válidos sob a licença MIT, sendo ideal para projetos de código aberto que necessitam apenas de planilhas como saída.

O IronXL é adequado para criar relatórios do Excel a partir de bancos de dados em ASP.NET?

Sim. O IronXL funciona diretamente com objetos DataTable e resultados de consultas .NET , facilitando o preenchimento de planilhas a partir do SQL Server ou outros bancos de dados relacionais e o envio do arquivo resultante para o navegador.

Quais são as vantagens de usar o IronXL em vez do EPPlus?

O IronXL oferece suporte nativo à exportação em CSV, JSON e XML, inclui suporte profissional em todas as licenças comerciais e não impõe restrições para uso não comercial. O EPPlus requer uma licença comercial separada para uso em produção e não oferece exportação nativa em múltiplos formatos.

O IronXL consegue lidar com grandes conjuntos de dados de forma eficiente?

O IronXL foi projetado para cargas de trabalho do lado do servidor e lida com grandes conjuntos de dados sem exigir o Microsoft Excel ou interoperabilidade COM. Para exportações muito grandes, o streaming do array de bytes diretamente pela resposta File() do ASP.NET Core evita o armazenamento em buffer do arquivo inteiro na memória.

O IronXL exige a instalação do Microsoft Office para exportar para o Excel?

Não. O IronXL opera inteiramente em código .NET gerenciado e não depende do Microsoft Office, da interoperabilidade COM ou da automação do Office. Ele funciona no Windows, Linux e macOS, onde quer que o .NET seja compatível.

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