Como importar um arquivo Excel para um GridView em ASP.NET C#
Importar dados do Excel para um GridView em ASP.NET C# é simples com IronXL. Você carrega uma pasta de trabalho, converte uma planilha em um DataTable e a vincula ao seu controle GridView -- tudo sem drivers OLEDB ou cadeias de conexão complexas.
Tente você mesmo: Pegue uma versão de teste do IronXL para acompanhar os exemplos de código abaixo.
Como Instalar o IronXL para Integração de GridView no Excel?
Antes de escrever qualquer código, você precisa adicionar o IronXL ao seu projeto ASP.NET. O caminho mais rápido é o NuGet, seja pelo Console do Gerenciador de Pacotes do Visual Studio ou pelo CLI do .NET.
Install-Package IronXL
dotnet add package IronXL
Install-Package IronXL
dotnet add package IronXL
Uma vez instalado, o NuGet adiciona todas as referências necessárias ao seu projeto. Não há drivers externos para instalar, nenhum fornecedor de OLEDB para registrar e nenhuma dependência do Microsoft Office no servidor. A biblioteca é fornecida como um único assembly gerenciado e funciona em Windows, Linux, macOS e ambientes de hospedagem em nuvem, incluindo o Azure App Service.
Após a instalação, adicione os seguintes namespaces a qualquer arquivo code-behind que leia ou escreva dados do Excel:
using IronXL;
using System.Data;
using System.IO;
using IronXL;
using System.Data;
using System.IO;
Imports IronXL
Imports System.Data
Imports System.IO
O IronXL suporta os formatos .xls (Excel 97-2003) e .xlsx (Excel 2007+), portanto, você não precisa lidar com cada tipo de arquivo separadamente. A mesma chamada WorkBook.Load lida com ambos os formatos, inspecionando automaticamente a assinatura do arquivo.
Por Que Ignorar OLEDB para Vinculação de Dados de GridView?
As importações tradicionais de Excel baseadas em OLEDB requerem o Microsoft Access Database Engine (ACE ou JET), que deve ser instalado no servidor com a bitness correta (32 bits vs. 64 bits). A implantação em diferentes ambientes de servidor frequentemente falha porque o driver está ausente ou incompatível, e a Microsoft não fornece mais o driver ACE de 64 bits com o Windows por padrão.
O IronXL elimina totalmente essa dependência. Ele lê o formato bruto Open XML ou BIFF diretamente em código gerenciado. Você obtém um comportamento previsível no desenvolvimento, estágio e produção sem preocupações com a versão do driver.
Quais Plataformas .NET o IronXL Alvo?
O IronXL alvo .NET 10, .NET 8, .NET Standard 2.0 e .NET Framework 4.6.2+. Essa cobertura significa que você pode usar a mesma biblioteca, quer sua aplicação ASP.NET seja executada em Web Forms clássicos, ASP.NET MVC ou ASP.NET Core Razor Pages modernos sem qualquer mudança de código na camada de manipulação do Excel. Você pode encontrar o pacote IronXL em NuGet.org para inspecionar o histórico de versões e notas de lançamento antes da instalação.
Qual É a Maneira Mais Rápida de Carregar Dados do Excel em um GridView?
O método mais rápido combina WorkBook.Load, sheet.ToDataTable e GridView.DataBind em cerca de quatro linhas de código efetivo. Não é necessária criação manual de colunas nem iteração de linhas para cenários básicos.
using IronXL;
using System.Data;
WorkBook workBook = WorkBook.Load("data.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// true = treat first row as column headers
DataTable dataTable = sheet.ToDataTable(true);
GridView1.DataSource = dataTable;
GridView1.DataBind();
using IronXL;
using System.Data;
WorkBook workBook = WorkBook.Load("data.xlsx");
WorkSheet sheet = workBook.DefaultWorkSheet;
// true = treat first row as column headers
DataTable dataTable = sheet.ToDataTable(true);
GridView1.DataSource = dataTable;
GridView1.DataBind();
Imports IronXL
Imports System.Data
Dim workBook As WorkBook = WorkBook.Load("data.xlsx")
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
' True = treat first row as column headers
Dim dataTable As DataTable = sheet.ToDataTable(True)
GridView1.DataSource = dataTable
GridView1.DataBind()
A chamada ToDataTable(true) instrui o IronXL a promover a primeira linha da planilha para nomes de coluna no resultado DataTable. Quando você vincula essa tabela a um GridView com AutoGenerateColumns="true", o ASP.NET cria automaticamente uma coluna para cada cabeçalho do Excel.
Como o ToDataTable Lida com Tipos de Dados Mistos?
Cada valor de célula em DataTable é armazenado como um string por padrão quando você chama ToDataTable. Se o seu aplicativo precisar de colunas tipadas -- por exemplo, decimal para dados de preço ou DateTime para datas -- você pode ler os valores das células individualmente através do indexador WorkSheet e convertê-los para o tipo .NET apropriado antes de preencher um DataTable fortemente tipado.
Para uma exibição simples em um GridView, colunas de string são suficientes porque a grade renderiza todos os valores como texto de qualquer maneira.
Como Criar uma Página ASP.NET Web Forms para Importar Excel?
Uma página de importação mínima precisa de três controles: uma entrada para upload de arquivo, um botão de envio e o GridView. Adicione o seguinte código HTML ASPX dentro do seu elemento <form runat="server">:
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload Excel File"
OnClick="btnUpload_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"
CssClass="table table-bordered" />
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload Excel File"
OnClick="btnUpload_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true"
CssClass="table table-bordered" />
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload Excel File" OnClick="btnUpload_Click" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" CssClass="table table-bordered" />
O atributo CssClass integra a grade à sua folha de estilo Bootstrap, caso esteja utilizando uma, fornecendo linhas e bordas estilizadas sem necessidade de configuração adicional.
Não code-behind, trate o evento de clique do botão. O padrão abaixo salva o arquivo carregado em um caminho temporário do servidor, carrega-o com o IronXL e vincula o resultado DataTable à grade:
using IronXL;
using System.Data;
using System.IO;
void btnUpload_Click(object sender, EventArgs e)
{
if (!FileUpload1.HasFile) return;
string uploadDir = Server.MapPath("~/Uploads/");
Directory.CreateDirectory(uploadDir); // ensure directory exists
string filePath = Path.Combine(uploadDir, Path.GetFileName(FileUpload1.FileName));
FileUpload1.SaveAs(filePath);
WorkBook workBook = WorkBook.Load(filePath);
WorkSheet sheet = workBook.DefaultWorkSheet;
DataTable dt = sheet.ToDataTable(true);
GridView1.DataSource = dt;
GridView1.DataBind();
// Store for later export operations
Session["CurrentData"] = dt;
}
using IronXL;
using System.Data;
using System.IO;
void btnUpload_Click(object sender, EventArgs e)
{
if (!FileUpload1.HasFile) return;
string uploadDir = Server.MapPath("~/Uploads/");
Directory.CreateDirectory(uploadDir); // ensure directory exists
string filePath = Path.Combine(uploadDir, Path.GetFileName(FileUpload1.FileName));
FileUpload1.SaveAs(filePath);
WorkBook workBook = WorkBook.Load(filePath);
WorkSheet sheet = workBook.DefaultWorkSheet;
DataTable dt = sheet.ToDataTable(true);
GridView1.DataSource = dt;
GridView1.DataBind();
// Store for later export operations
Session["CurrentData"] = dt;
}
Imports IronXL
Imports System.Data
Imports System.IO
Sub btnUpload_Click(sender As Object, e As EventArgs)
If Not FileUpload1.HasFile Then Return
Dim uploadDir As String = Server.MapPath("~/Uploads/")
Directory.CreateDirectory(uploadDir) ' ensure directory exists
Dim filePath As String = Path.Combine(uploadDir, Path.GetFileName(FileUpload1.FileName))
FileUpload1.SaveAs(filePath)
Dim workBook As WorkBook = WorkBook.Load(filePath)
Dim sheet As WorkSheet = workBook.DefaultWorkSheet
Dim dt As DataTable = sheet.ToDataTable(True)
GridView1.DataSource = dt
GridView1.DataBind()
' Store for later export operations
Session("CurrentData") = dt
End Sub
Esta implementação segue o estilo de declarações de nível superior para a lógica dentro do manipulador de eventos, mantendo a assinatura de evento requerida do Web Forms. Observe que Directory.CreateDirectory é chamado defensivamente -- se a pasta Uploads já existir, a chamada não terá efeito.
Após o usuário selecionar um arquivo .xlsx e clicar no botão de upload, a grade será preenchida com o conteúdo da planilha. Os nomes das colunas vêm da primeira linha do arquivo Excel, e todas as linhas subsequentes se tornam linhas de dados na grade.
Como Você Deve Validar o Arquivo Carregado?
Para uso em produção, você deve verificar a extensão do arquivo e o tipo MIME antes de processar. IronXL lançará uma exceção em formatos de arquivo não suportados, mas é melhor rejeitar uploads ruins no nível do controlador antes de tocar no sistema de arquivos:
string ext = Path.GetExtension(FileUpload1.FileName).ToBaixoerInvariant();
string[] allowed = { ".xls", ".xlsx" };
if (!allowed.Contains(ext))
{
lblError.Text = "Only .xls and .xlsx files are accepted.";
return;
}
string ext = Path.GetExtension(FileUpload1.FileName).ToBaixoerInvariant();
string[] allowed = { ".xls", ".xlsx" };
if (!allowed.Contains(ext))
{
lblError.Text = "Only .xls and .xlsx files are accepted.";
return;
}
Imports System.IO
Dim ext As String = Path.GetExtension(FileUpload1.FileName).ToLowerInvariant()
Dim allowed As String() = {".xls", ".xlsx"}
If Not allowed.Contains(ext) Then
lblError.Text = "Only .xls and .xlsx files are accepted."
Return
End If
Você também deve impor um tamanho máximo de arquivo por meio de limites de solicitação do IIS ou verificando FileUpload1.FileBytes.Length em relação a um limite antes de chamar SaveAs.
Como Você Acessa Planilhas e Intervalos de Células Específicos?
Quando uma pasta de trabalho do Excel contém várias planilhas, você precisa selecionar uma específica pelo nome, em vez de usar DefaultWorkSheet. IronXL fornece um método GetWorkSheet que aceita o nome da guia da planilha como uma string.
using IronXL;
using System.Data;
WorkBook workBook = WorkBook.Load("sales-report.xlsx");
// Access a named sheet
WorkSheet salesSheet = workBook.GetWorkSheet("Q4 Sales");
// Read a specific cell range
var topTen = salesSheet["A1:E11"];
// Convert the entire workbook to a DataSet (one DataTable per sheet)
DataSet allSheets = workBook.ToDataSet();
// Bind the first sheet's DataTable to the grid
GridView1.DataSource = allSheets.Tables[0];
GridView1.DataBind();
using IronXL;
using System.Data;
WorkBook workBook = WorkBook.Load("sales-report.xlsx");
// Access a named sheet
WorkSheet salesSheet = workBook.GetWorkSheet("Q4 Sales");
// Read a specific cell range
var topTen = salesSheet["A1:E11"];
// Convert the entire workbook to a DataSet (one DataTable per sheet)
DataSet allSheets = workBook.ToDataSet();
// Bind the first sheet's DataTable to the grid
GridView1.DataSource = allSheets.Tables[0];
GridView1.DataBind();
Imports IronXL
Imports System.Data
Dim workBook As WorkBook = WorkBook.Load("sales-report.xlsx")
' Access a named sheet
Dim salesSheet As WorkSheet = workBook.GetWorkSheet("Q4 Sales")
' Read a specific cell range
Dim topTen = salesSheet("A1:E11")
' Convert the entire workbook to a DataSet (one DataTable per sheet)
Dim allSheets As DataSet = workBook.ToDataSet()
' Bind the first sheet's DataTable to the grid
GridView1.DataSource = allSheets.Tables(0)
GridView1.DataBind()
O método ToDataSet é útil quando seu aplicativo precisa exibir dados de várias planilhas ou permitir que o usuário escolha qual planilha visualizar. Cada DataTable no DataSet retornado corresponde a uma planilha do Excel, e o nome da tabela corresponde ao nome da guia da planilha.
Como Você Filtra Linhas Antes de Vincular ao GridView?
Se você deseja apenas um subconjunto de linhas do Excel -- por exemplo, linhas onde uma coluna "Status" é igual a "Ativo" -- leia o DataTable produzido por ToDataTable, aplique um filtro DataView e vincule a visualização filtrada à grade:
DataTable dt = sheet.ToDataTable(true);
DataView dv = new DataView(dt)
{
RowFilter = "Status = 'Active'"
};
GridView1.DataSource = dv;
GridView1.DataBind();
DataTable dt = sheet.ToDataTable(true);
DataView dv = new DataView(dt)
{
RowFilter = "Status = 'Active'"
};
GridView1.DataSource = dv;
GridView1.DataBind();
Dim dt As DataTable = sheet.ToDataTable(True)
Dim dv As New DataView(dt) With {
.RowFilter = "Status = 'Active'"
}
GridView1.DataSource = dv
GridView1.DataBind()
DataView.RowFilter aceita a sintaxe padrão da cláusula WHERE do SQL -- a mesma linguagem de expressão documentada na propriedade DataColumn.Expression no Microsoft Learn -- permitindo classificar e filtrar sem carregar um banco de dados.
Como Você Compara Métodos de Importação para Vinculação de GridView no Excel?
Diferentes abordagens para vinculação Excel-para-GridView têm compensações distintas. A tabela abaixo resume os métodos mais comuns para que você possa escolher o certo para o seu cenário.
| Método | Driver Necessário | Suporte a XLS | Suporte a XLSX | Dependência de Servidor | Complexidade do código |
|---|---|---|---|---|---|
| IronXL (ToDataTable) | Nenhum | Sim | Sim | Nenhum | Baixo |
| OLEDB / JET | ACE/Motor JET | Sim | Parcial | Driver 32/64-bit | Alto |
| SDK Open XML | Nenhum | Não | Sim | Nenhum | Alto |
| EPPlus | Nenhum | Não | Sim | Nenhum (licença comercial necessária para produção) | Médio |
IronXL cobre ambos os formatos XLS legados e XLSX modernos, não requer instalação de driver do lado do servidor e oferece a menor complexidade de código das opções listadas. Para equipes que já utilizam outros produtos da Iron Software, como IronPDF ou IronOCR, uma única licença da Iron Software cobre todo o suite.
Como Você Exporta Dados do GridView de Volta para o Excel?
Completar a viagem de ida e volta - do Excel para uma grade e de volta para o Excel - é igualmente conciso com IronXL. Este padrão é útil para botões 'baixar como Excel' que permitem que os usuários exportem o que está sendo exibido atualmente na grade.
void btnExport_Click(object sender, EventArgs e)
{
DataTable dt = Session["CurrentData"] as DataTable;
if (dt == null) return;
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet ws = workBook.CreateWorkSheet("Export");
// Write header row
for (int col = 0; col < dt.Columns.Count; col++)
ws.SetCellValue(0, col, dt.Columns[col].ColumnName);
// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
for (int col = 0; col < dt.Columns.Count; col++)
ws.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
string exportDir = Server.MapPath("~/Exports/");
Directory.CreateDirectory(exportDir);
string exportPath = Path.Combine(exportDir, "export.xlsx");
workBook.SaveAs(exportPath);
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=export.xlsx");
Response.TransmitFile(exportPath);
Response.End();
}
void btnExport_Click(object sender, EventArgs e)
{
DataTable dt = Session["CurrentData"] as DataTable;
if (dt == null) return;
WorkBook workBook = WorkBook.Create(ExcelFileFormat.XLSX);
WorkSheet ws = workBook.CreateWorkSheet("Export");
// Write header row
for (int col = 0; col < dt.Columns.Count; col++)
ws.SetCellValue(0, col, dt.Columns[col].ColumnName);
// Write data rows
for (int row = 0; row < dt.Rows.Count; row++)
for (int col = 0; col < dt.Columns.Count; col++)
ws.SetCellValue(row + 1, col, dt.Rows[row][col]?.ToString() ?? string.Empty);
string exportDir = Server.MapPath("~/Exports/");
Directory.CreateDirectory(exportDir);
string exportPath = Path.Combine(exportDir, "export.xlsx");
workBook.SaveAs(exportPath);
Response.Clear();
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("Content-Disposition", "attachment; filename=export.xlsx");
Response.TransmitFile(exportPath);
Response.End();
}
Imports System
Imports System.Data
Imports System.IO
Sub btnExport_Click(sender As Object, e As EventArgs)
Dim dt As DataTable = TryCast(Session("CurrentData"), DataTable)
If dt Is Nothing Then Return
Dim workBook As WorkBook = WorkBook.Create(ExcelFileFormat.XLSX)
Dim ws As WorkSheet = workBook.CreateWorkSheet("Export")
' Write header row
For col As Integer = 0 To dt.Columns.Count - 1
ws.SetCellValue(0, col, dt.Columns(col).ColumnName)
Next
' Write data rows
For row As Integer = 0 To dt.Rows.Count - 1
For col As Integer = 0 To dt.Columns.Count - 1
ws.SetCellValue(row + 1, col, If(dt.Rows(row)(col)?.ToString(), String.Empty))
Next
Next
Dim exportDir As String = Server.MapPath("~/Exports/")
Directory.CreateDirectory(exportDir)
Dim exportPath As String = Path.Combine(exportDir, "export.xlsx")
workBook.SaveAs(exportPath)
Response.Clear()
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
Response.AddHeader("Content-Disposition", "attachment; filename=export.xlsx")
Response.TransmitFile(exportPath)
Response.End()
End Sub
A chamada Response.TransmitFile transmite o arquivo salvo para o navegador, acionando uma caixa de diálogo de download. O cabeçalho Content-Disposition: attachment garante que os navegadores baixem o arquivo em vez de tentar exibi-lo diretamente no arquivo.
Quais São as Opções Comuns de Formatação do IronXL para Exportações?
Além dos dados brutos, IronXL permite que você aplique formatação de células antes de salvar. Você pode definir cabeçalhos em negrito, larguras de coluna, formatos numéricos e cores de fundo:
// Bold the header row
ws["A1:Z1"].Style.Font.Bold = true;
// Apply a currency format to column C (index 2), rows 2 onward
ws[$"C2:C{dt.Rows.Count + 1}"].FormatString = IronXL.Styles.BuiltinFormats.Accounting2;
// Auto-fit column widths (IronXL approximates based on content length)
ws.AutoSizeColumn(0);
ws.AutoSizeColumn(1);
// Bold the header row
ws["A1:Z1"].Style.Font.Bold = true;
// Apply a currency format to column C (index 2), rows 2 onward
ws[$"C2:C{dt.Rows.Count + 1}"].FormatString = IronXL.Styles.BuiltinFormats.Accounting2;
// Auto-fit column widths (IronXL approximates based on content length)
ws.AutoSizeColumn(0);
ws.AutoSizeColumn(1);
' Bold the header row
ws("A1:Z1").Style.Font.Bold = True
' Apply a currency format to column C (index 2), rows 2 onward
ws($"C2:C{dt.Rows.Count + 1}").FormatString = IronXL.Styles.BuiltinFormats.Accounting2
' Auto-fit column widths (IronXL approximates based on content length)
ws.AutoSizeColumn(0)
ws.AutoSizeColumn(1)
Essas chamadas de formatação usam a API de estilização de células do IronXL, que espelha o modelo de objeto do formato de arquivo do Excel sem exigir Interop.
Quais são os seus próximos passos?
Agora você tem um pipeline completo e sem driver para importar arquivos Excel em um GridView ASP.NET e exportar dados do GridView de volta para Excel usando IronXL. Aqui está o que explorar a seguir para construir sobre esta base:
- Leia a documentação do IronXL para a referência completa da API, incluindo avaliação de fórmulas, operações de intervalos de células e criação de gráficos.
- Explore a biblioteca de exemplos de código do IronXL para trechos prontos para execução sobre importação de CSV, livros protegidos por senha, formatação condicional e mais.
- Tente o tutorial Excel para DataTable se você quiser uma cobertura mais profunda de mapeamento de coluna digitada e manuseio de nulos.
- Verifique a página de licenciamento do IronXL para revisar as opções desde licenças de desenvolvimento até redistribuição OEM.
- Revise o guia de leitura de Excel .NET da Iron Software para entender navegação em livros e planilhas em detalhes.
- Compare o IronXL com alternativas usando a comparação de bibliotecas de Excel C# para uma análise recurso por recurso contra OLEDB, EPPlus e o SDK Open XML.
Para aplicações .NET Core e ASP.NET Core, a mesma API do IronXL funciona em Razor Pages e controladores MVC. O guia do IronXL ASP.NET Core aborda as diferenças no manuseio de uploads de arquivos e padrões de injeção de dependência.
Comece com o teste gratuito do IronXL para experimentar todos os recursos no seu projeto antes de comprar. Nenhum cartão de crédito é necessário para a licença de teste.
Perguntas frequentes
Qual a vantagem de usar o IronXL para importar dados do Excel para o GridView em ASP.NET C#?
O uso do IronXL simplifica o processo de importação de dados do Excel para o GridView em ASP.NET C#, eliminando a necessidade de strings de conexão OLEDB complexas e instalações de drivers. Ele permite que os desenvolvedores carreguem arquivos XLS e XLSX, os convertam em DataTables e os exibam em controles GridView com código simples.
Como o IronXL lida com diferentes formatos de arquivo do Excel?
O IronXL suporta vários formatos de arquivo do Excel, incluindo XLS e XLSX, tornando-se uma ferramenta versátil para importar dados para o GridView. Ele garante compatibilidade e facilidade de uso em diferentes versões do Excel.
O IronXL consegue converter arquivos do Excel em DataTables?
Sim, o IronXL pode converter arquivos do Excel em DataTables, que podem então ser facilmente exibidas em controles GridView no ASP.NET C#. Esse recurso simplifica o processo de manipulação e visualização de dados.
O IronXL é adequado para arquivos Excel grandes?
O IronXL foi projetado para lidar com arquivos Excel grandes de forma eficiente, tornando-se uma escolha confiável para projetos que exigem a importação de grandes quantidades de dados para o GridView em ASP.NET C#.
Quais são os problemas comuns que se evitam ao usar o IronXL?
Ao usar o IronXL, os desenvolvedores podem evitar problemas comuns, como lidar com strings de conexão OLEDB, compatibilidade com drivers de servidor e processos complexos de importação de dados, reduzindo assim o tempo de depuração.
O IronXL requer alguma configuração especial no servidor?
Não, o IronXL não requer configurações especiais de servidor nem drivers adicionais, o que simplifica a implementação e reduz os custos de manutenção.
Como o IronXL melhora a produtividade do desenvolvimento?
O IronXL melhora a produtividade do desenvolvimento ao fornecer uma maneira simples e eficiente de importar dados do Excel para o GridView no ASP.NET C#, permitindo que os desenvolvedores se concentrem em outras tarefas críticas sem se perderem nas complexidades da importação de dados.
É possível integrar o IronXL com aplicações ASP.NET C# já existentes?
Sim, o IronXL pode ser facilmente integrado a aplicações ASP.NET C# existentes, permitindo a importação perfeita de dados do Excel para o GridView sem alterações significativas na arquitetura da aplicação.
Quais linguagens de programação são suportadas pelo IronXL?
O IronXL foi projetado principalmente para uso em ambientes C# e ASP.NET, oferecendo suporte robusto e integração para essas linguagens de programação.



