IRONSOFTWAREHOME
USANDO O IRONXL

Exportando Dados de um GridView ASP.NET para um Arquivo Excel

Curtis Chau
Curtis Chau
Updated: 28 de junho de 2026

Você pode exportar um GridView do ASP.NET para um arquivo Excel XLSX em C# instalando IronXL, criando um WorkBook, iterando sobre as linhas do GridView, escrevendo cada valor de célula na posição correspondente na planilha e salvando o livro no disco ou no fluxo de resposta HTTP. Essa abordagem não requer instalação do Microsoft Office no servidor e funciona de forma confiável em todo o .NET Framework, .NET Core e .NET 5 até .NET 10 em aplicações web.

Exportar dados do GridView para Excel é um requisito padrão em projetos empresariais ASP.NET Web Forms. Os usuários precisam extrair dados tabulares do navegador e colocá-los em planilhas para relatórios, análise offline e arquivamento. O desafio é preencher a lacuna entre o controle GridView do lado do servidor e um arquivo .xlsx corretamente estruturado -- sem introduzir dependências do Office Interop que quebram em ambientes de servidor web.

Este guia orienta você através de três padrões de exportação progressivamente mais ricos: uma exportação mínima linha a linha, uma exportação de cabeçalho e dados com ajuste automático de colunas, e uma exportação DataTable que ignora o HTML renderizado por completo. Cada exemplo usa código compatível com instruções de nível superior em C# e a API do IronXL.

Como você instala o IronXL em um projeto ASP.NET?

Abra o Console do Gerenciador de Pacotes no Visual Studio e execute:

PM > Install-Package IronXL.Excel

Alternativamente, clique com o botão direito do mouse no projeto no Solution Explorer, escolha Manage NuGet Packages, procure por IronXL e clique em Install. O NuGet resolve automaticamente todas as dependências transitivas.

Após a instalação do pacote, adicione as seguintes diretivas using ao seu arquivo de code-behind:

using System;
using System.Data;
using System.Web.UI;
using IronXL;

IronXL suporta .NET Framework 4.6.2 e posteriores, assim como .NET Core 3.1 e .NET 5 até .NET 10. Não é necessário instalar o Office ou registrar COM no servidor. Documentação completa da API está disponível na referência de objeto IronXL.

Qual ID de Pacote NuGet Devo Usar?

O ID do pacote correto é IronXL (não IronXL.Excel, que é um alias legado). Após a instalação, o assembly IronXL.dll é referenciado automaticamente. Você pode verificar a versão instalada checando o nó Packages no Solution Explorer ou executando dotnet list package no diretório do projeto.

O IronXL Funciona em Aplicações Web ASP.NET Core?

Sim. A mesma API funciona em projetos de ASP.NET Web Forms e ASP.NET Core (MVC ou Razor Pages). Em projetos Core, substitua Server.MapPath por IWebHostEnvironment.WebRootPath ou Path.Combine(Directory.GetCurrentDirectory(), "Exports") ao construir caminhos de arquivo do lado do servidor.

Como Exportar um GridView para um Arquivo Excel?

O padrão de exportação mais simples itera sobre cada linha renderizada no GridView e copia o texto de cada célula para a célula correspondente na planilha do Excel. Não markup ASPX, adicione um controle <asp:GridView ID="gvEmployees" runat="server" AutoGenerateColumns="true" /> e um botão <asp:Button ID="btnExport" runat="server" Text="Export to Excel" OnClick="btnExport_Click" />. O atributo runat="server" torna ambos os controles acessíveis no code-behind.

O code-behind vincula dados de exemplo na primeira carga e exporta na clique do botão:

using System;
using System.Data;
using System.Web.UI;
using IronXL;

public partial class GridViewExport : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindGridView();
        }
    }

    private void BindGridView()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("EmployeeID", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Department", typeof(string));
        dt.Columns.Add("Salary", typeof(decimal));

        dt.Rows.Add(1, "John Smith", "Engineering", 75000);
        dt.Rows.Add(2, "Sarah Johnson", "Marketing", 65000);
        dt.Rows.Add(3, "Michael Chen", "Finance", 70000);

        ViewState["EmployeeData"] = dt;
        gvEmployees.DataSource = dt;
        gvEmployees.DataBind();
    }

    protected void btnExport_Click(object sender, EventArgs e)
    {
        WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
        WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

        // Write header row
        for (int j = 0; j < gvEmployees.HeaderRow.Cells.Count; j++)
        {
            worksheet.SetCellValue(0, j, gvEmployees.HeaderRow.Cells[j].Text);
        }

        // Write data rows
        for (int i = 0; i < gvEmployees.Rows.Count; i++)
        {
            for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
            {
                worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
            }
        }

        string filePath = Server.MapPath("~/Exports/EmployeeData.xlsx");
        workbook.SaveAs(filePath);
    }
}

A chamada WorkBook.Create(ExcelFileFormat.XLSX) inicializa um livro de memórias visando o formato moderno Open XML. CreateWorkSheet("Employees") adiciona a primeira folha. O loop externo (i) avança através das linhas de dados; o loop interno (j) avança através das colunas. O índice de linha i + 1 é usado para células de dados para que o cabeçalho na linha 0 não seja sobrescrito.

Por que Usar IronXL em Vez do Excel Interop?

Excel Interop requer uma cópia licenciada do Microsoft Excel instalada no servidor e cria objetos COM que devem ser liberados explicitamente para evitar vazamentos de memória.IronXL lê e escreve arquivos .xlsx diretamente como pacotes Open XML -- sem COM, sem Office, sem boilerplate Marshal.ReleaseComObject. Isso o torna confiável em IIS, Azure App Service, Docker e outros ambientes de servidor onde o Office não está disponível.

Qual é o Tipo MIME Correto para Downloads de XLSX?

Quando você quer que o navegador apresente um diálogo de salvamento de arquivo em vez de servir os bytes de forma embutida, defina o tipo de conteúdo da resposta para application/vnd.openxmlformats-officedocument.spreadsheetml.sheet e adicione um cabeçalho Content-Disposition: attachment antes de escrever os bytes do livro no fluxo de resposta.

Como Adicionar Cabeçalhos de Coluna e Auto-Ajustar Colunas?

O exemplo básico escreve cabeçalhos extraídos de HeaderRow.Cells, mas uma exportação de produção também deve dimensionar automaticamente cada coluna para que os dados sejam legíveis sem ajustes manuais no Excel:

protected void btnExport_Click(object sender, EventArgs e)
{
    WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);
    WorkSheet worksheet = workbook.CreateWorkSheet("Employees");

    // Write column headers
    int colCount = gvEmployees.HeaderRow.Cells.Count;
    for (int i = 0; i < colCount; i++)
    {
        string header = gvEmployees.HeaderRow.Cells[i].Text;
        worksheet.SetCellValue(0, i, header);
    }

    // Write data rows
    for (int i = 0; i < gvEmployees.Rows.Count; i++)
    {
        for (int j = 0; j < gvEmployees.Rows[i].Cells.Count; j++)
        {
            worksheet.SetCellValue(i + 1, j, gvEmployees.Rows[i].Cells[j].Text);
        }
    }

    // Auto-size each column for readability
    for (int col = 0; col < colCount; col++)
    {
        worksheet.AutoSizeColumn(col);
    }

    string filePath = Server.MapPath("~/Exports/EmployeeReport.xlsx");
    workbook.SaveAs(filePath);
}

AutoSizeColumn(col) instrui o IronXL a calcular a largura ideal da coluna com base no comprimento do conteúdo da célula, espelhando a ação Formatar > Ajuste automático da largura da coluna no aplicativo de desktop Excel. Chamando isso em um loop após escrever todos os dados é mais eficiente do que chamá-lo após cada linha porque o conteúdo final é conhecido nesse ponto.

Para opções adicionais de estilo -- cabeçalhos em negrito, cores de fundo, formatos de número -- explore o tutorial de estilo de célula do IronXL. Você também pode mesclar células para criar títulos de relatórios que abrangem várias colunas.

Como Aplicar Formatação em Negrito a Células de Cabeçalho?

Use o objeto IStyle retornado por worksheet["A1"].Style (ou um intervalo). Defina Font.Bold = true antes ou depois de escrever os valores -- o estilo é desacoplado do conteúdo da célula:

// Bold the entire header row (columns A through D)
var headerRange = worksheet["A1:D1"];
headerRange.Style.Font.Bold = true;
headerRange.Style.BackgroundColor = "#4472C4";
headerRange.Style.Font.FontColor = "#FFFFFF";

Este padrão se aplica uniformemente a intervalos de qualquer tamanho. Para uma lista completa de propriedades de estilo, veja a referência de API de estilização do IronXL.

Como Exportar Dados Diretamente de um DataTable?

Iterar sobre as linhas renderizadas GridView vincula sua exportação ao estado visual atual do controle, que pode ser afetado por configurações de paginação, ordenação e visibilidade de colunas. Exportar do DataTable subjacente armazenado em ViewState produz um resultado determinístico, independentemente de como a grade está configurada:

protected void btnExport_Click(object sender, EventArgs e)
{
    DataTable sourceData = ViewState["EmployeeData"] as DataTable;
    if (sourceData == null)
    {
        Response.Write("No data available to export.");
        return;
    }

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

    // Column headers from DataTable schema
    for (int i = 0; i < sourceData.Columns.Count; i++)
    {
        worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);
    }

    // Data rows from DataRow objects
    for (int i = 0; i < sourceData.Rows.Count; i++)
    {
        for (int j = 0; j < sourceData.Columns.Count; j++)
        {
            worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());
        }
    }

    string filePath = Server.MapPath("~/Exports/DataExport.xlsx");
    workbook.SaveAs(filePath);
}

Os nomes das colunas vêm de DataTable.Columns[i].ColumnName, que reflete o esquema de dados original, em vez de quaisquer substituições de nome de exibição aplicadas no modelo GridView. Os valores das células são recuperados de objetos DataRow usando o índice da coluna, lançando cada valor para string para satisfazer SetCellValue.

Esse padrão é particularmente valioso quando o GridView usa paginação -- iterar gvEmployees.Rows retorna apenas as linhas na página atualmente visível, enquanto ler do DataTable completo exporta todos os registros.

O Que Acontece com Exportações de DataTable Grandes?

IronXL transmite dados de workbook de forma eficiente para grandes conjuntos de dados Excel. Para exportações superiores a 100.000 linhas, considere agrupar chamadas SetCellValue dentro de uma única operação de planilha, em vez de definir células individualmente em um loop aninhado. Você também pode escrever o livro em um MemoryStream e liberá-lo para o fluxo Response de forma incremental, evitando manter o arquivo inteiro na memória RAM do servidor.

Como Lidar com Erros Durante a Exportação?

Os manipuladores de exportação de produção devem envolver as operações do IronXL em um bloco catch e retornar uma mensagem descritiva ao usuário quando algo der errado. Modos comuns de falha incluem diretório ~/Exports/ ausente, erros de permissão de arquivo e ViewState sendo nulo após um tempo limite da sessão:

protected void btnExport_Click(object sender, EventArgs e)
{
    try
    {
        DataTable sourceData = ViewState["EmployeeData"] as DataTable;
        if (sourceData == null)
            throw new InvalidOperationException("Session data has expired. Please reload the page.");

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

        for (int i = 0; i < sourceData.Columns.Count; i++)
            worksheet.SetCellValue(0, i, sourceData.Columns[i].ColumnName);

        for (int i = 0; i < sourceData.Rows.Count; i++)
            for (int j = 0; j < sourceData.Columns.Count; j++)
                worksheet.SetCellValue(i + 1, j, sourceData.Rows[i][j].ToString());

        string filePath = Server.MapPath("~/Exports/SafeExport.xlsx");
        workbook.SaveAs(filePath);

        lblStatus.Text = "Export successful. File saved to server.";
    }
    catch (Exception ex)
    {
        lblStatus.Text = $"Export failed: {ex.Message}";
    }
}

Para aplicativos web que entregam o arquivo como um download direto do navegador em vez de salvá-lo no disco, use Response.BinaryWrite ou escreva em Response.OutputStream depois de definir os cabeçalhos de tipo de conteúdo e disposição. Certifique-se de que o diretório ~/Exports/ exista e que a identidade do pool de aplicativos IIS tenha permissão de gravação nele.

Como enviar o arquivo XLSX como um download do navegador?

Substitua workbook.SaveAs(filePath) por uma resposta baseada em fluxo:

using System.IO;

// ... inside btnExport_Click after populating the worksheet ...

byte[] fileBytes;
using (MemoryStream ms = new MemoryStream())
{
    workbook.SaveAs(ms);
    fileBytes = ms.ToArray();
}

Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=EmployeeData.xlsx");
Response.BinaryWrite(fileBytes);
Response.End();

Este padrão evita a escrita de um arquivo temporário no disco. O MemoryStream é alocado no servidor, serializado para byte[] e enviado diretamente para o cliente. A chamada Response.End() libera a resposta e impede que a marcação adicional de página seja anexada após os dados binários.

Como exportar múltiplas planilhas ou livros avançados?

Um único WorkBook pode conter várias folhas, o que é útil quando você precisa exportar vários GridViews -- ou o mesmo conjunto de dados em diferentes granularidades -- em um único arquivo. Chame workbook.CreateWorkSheet(name) uma vez para cada guia:

WorkBook workbook = WorkBook.Create(ExcelFileFormat.XLSX);

WorkSheet summary = workbook.CreateWorkSheet("Summary");
WorkSheet detail  = workbook.CreateWorkSheet("Detail");

// Populate summary sheet ...
// Populate detail sheet ...

workbook.SaveAs(Server.MapPath("~/Exports/FullReport.xlsx"));

IronXL também suporta ler arquivos Excel existentes, para que você possa carregar um modelo pré-construído com marca e formatação, injetar dados em células específicas e salvar o resultado -- preservando gráficos, imagens e estilos já presentes no modelo.

Para uma saída ainda mais rica, o IronXL oferece suporte a fórmulas do Excel, formatação condicional, criação de gráficos e inclusão de imagens. Estas capacidades estão documentadas na seção de tutoriais do IronXL.

Como o IronXL se compara aoEPPluse ClosedXML?

RecursoIronXLEPPlusClosedXML
Instalação do Office necessáriaNãoNãoNão
Leitura e escrita de XLSXSimSimSim
Suporte a XLS (legado)SimNãoNão
Exportação CSV / TSVSimNãoParcial
API de criação de gráficoSimSimLimitado
Modelo de licençaPerpétua + SaaSPolyform não comercialMIT
Suporte a .NET 10SimSimSim

EPPlus mudou para uma licença comercial na versão 5, tornando o IronXL uma alternativa natural para equipes já investindo em um ecossistema de bibliotecas comerciais .NET. ClosedXML permanece com licença MIT, mas tem suporte limitado a gráficos. A escolha certa depende das restrições de licenciamento do seu projeto, dos recursos do Excel de que você precisa e se o suporte ao formato legado .xls é um requisito.

Quais formatos de Excel o IronXL suporta?

IronXL lê e escreve .xlsx (Office Open XML), .xls (legado BIFF8), .csv e formatos .tsv. Você pode converter entre formatos de arquivo Excel com uma única chamada de API alterando o valor enum ExcelFileFormat passado para WorkBook.Create ou carregando um arquivo existente e salvando em um formato diferente.

Quais são os seus próximos passos?

Agora você tem três padrões prontos para produção para exportar dados do ASP.NET GridView para arquivos Excel XLSX usando IronXL:

  • Exportação por iteração de linha -- o caminho mais rápido para uma exportação funcional a partir de um GridView vinculado
  • Exportação de cabeçalhos e formatação -- adiciona redimensionamento automático de colunas e cabeçalhos em negrito para relatórios apresentáveis
  • Exportação baseada em DataTable -- ignora completamente o controle renderizado para grades paginadas ou filtradas

Os próximos passos lógicos são:

  1. Adicione uma resposta de download do navegador usando MemoryStream e Response.BinaryWrite para que os usuários recebam o arquivo imediatamente, sem um caminho de salvamento do lado do servidor.
  2. Aplicar estilo às células -- cabeçalhos em negrito, preenchimentos de cor de fundo e formatos numéricos -- usando a API de formatação do IronXL.
  3. Explorar livros com múltiplas folhas para combinar dados de resumo e detalhamento em um único arquivo entregue aos interessados.
  4. Leia arquivos Excel de volta em objetos DataTable usando a API de leitura do IronXL para fluxos de trabalho de importação/exportação de ida e volta.
  5. Comece um teste gratuito em ironsoftware.com/csharp/excel/ para testar todas as funcionalidades em seu projeto com uma licença de teste de capacidade total.

Para equipes construindo pipelines de geração de documentos, IronPDF integra-se com IronXL para exportar planilhas diretamente para PDF. O Iron Suite combina IronXL com IronPDF, IronOCR, IronBarcode e IronZIP a um preço reduzido.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.