VB
.NET
-
Importando uma planilha Excel
em um DataGridView
![]() |
Neste tutorial eu vou mostrar como podemos importar os dados de uma planilha Excel para um controle DatagridView em uma aplicação Windows Forms usando a linguagem VB .NET.(Sem usar uma referência ao assembly Microsoft.Office.Interop.Excel) |
Neste artigo eu vou acessar planilhas Excel usando ADO .NET. Nesta abordagem
podemos pensar em um Workbook Excel como sendo um banco de dados e nas
planilhas como sendo tabelas:
Excel | Correspondência ADO .NET |
Workbook Excel | Banco de dados |
Sheet | Tabela |
Para você se situar damos abaixo um esquema bem simples do modelo exposto pelo Excel:
|
No topo da
hierarquia esta a classe Application É ela que temos que instanciar em nossa aplicação Visual Basic para ter acesso as propriedades e métodos das demais classes expostas pelo Excel.
|
Pois bem , já que vamos usar ADO .NET para acessar uma planilha Excel temos que definir uma string de conexão com a planilha.
Vale lembrar que as planilhas Excel podem estar no formato da versão 97-2003 do Excel com a extensão .xls ou podem estar no formato da versão 2007 com a extensão .xlxs.
Considerando isso temos as seguintes strings de conexão possíveis:
Excel 97-2003 Format (.XLS) |
|
Excel 2007 Format (.XLSX) | "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Teste.xlsx;Extended Properties='Excel 8.0;HDR=Yes'" |
Nota: Na versão do Excel 2007 o novo provedor - Microsoft.ACE.OLEDB.12.0 - é usado. Esta versão funciona tanto para o Excel 2007 como para o Excel 2003.
Podemos especificar se o arquivo Excel possui Header ou não usando a propriedade HDR. Quando HDR é igual a Yes, a primeira linha da planilha é considerada como Header do arquivo Excel.
Recursos usados:
Criando o projeto no Visual Studio 2013 Express for windows desktop
Abra o VS 2013 Express for windows desktop e clique em New Project;
Selecione a linguagem Visual Basic e o template Windows Forms Application;
Informe o nome LerPlanilhaExcel e clique no botão OK;
![]() |
No formulário form1.vb criado por padrão no projeto vamos incluir a partir da ToolBox os seguintes controles:
1 DataGridview - dgvDados
2 Label
1 TextBox - txtCaminhoArquivoExcel
1 TextBox - txtNomePlanilhaExcel
1 Button - btnImportar
1 OpenFileDialog - ofd1
Disponha os controles conforme o leiaute da figura abaixo:
A título de exemplo vamos criar uma arquivo Excel chamada PlanilhaTeste.xls contendo 3 planilhas : IDH, Populacao e Pedidos; conforme mostra a figura abaixo:
Agora vamos definir o código do formulário iniciando com a declaração dos namespaces no início do formulário:
Imports
System.DataAgora no evento Click do botão procurar temos o código que usa o OpenFileDialog para abrir uma pasta para selecionar o arquivo Excel:
Private Sub btnLocalizar_Click(sender As Object, e As EventArgs) Handles btnLocalizar.Click
'define as propriedades do controle
'OpenFileDialog
Me.ofd1.Multiselect = False
Me.ofd1.Title = "Selecionar Arquivos"
ofd1.InitialDirectory = "C:\dados"
'filtra para exibir somente arquivos de Excel
ofd1.Filter = "Excel (*.xls;*.xlsx)|*.xls;*.xlsx|" & "All files (*.*)|*.*"
ofd1.CheckFileExists = True
ofd1.CheckPathExists = True
ofd1.FilterIndex = 2
ofd1.RestoreDirectory = True
ofd1.ReadOnlyChecked = True
ofd1.ShowReadOnly = True
Dim dr As DialogResult = Me.ofd1.ShowDialog()
If dr = System.Windows.Forms.DialogResult.OK Then
' Le os arquivos selecionados
For Each arquivo As String In ofd1.FileNames
txtCaminhoArquivoExcel.Text += arquivo & vbNewLine
Try
' Aqui fica o que deve ser executado com os arquivos selecionados.
Catch ex As SecurityException
' O usuário não possui permissão para ler arquivos
MessageBox.Show((("Erro de segurança entre em contato com o administrador de segurança da rede." & vbLf & vbLf & "Mensagem : ")
+ ex.Message & vbLf & vbLf & "Detalhes (enviar ao suporte):" & vbLf & vbLf) + ex.StackTrace)
Catch ex As Exception
' Não pode carregar o arquivo (problemas de permissão)
MessageBox.Show(("Não é possível exibir o arquivo : " & arquivo.Substring(arquivo.LastIndexOf("\"c))))
End Try
Next
End If
End Sub
|
O código utiliza o controle OpenFileDialog e define valores para algumas de suas propriedades. A seguir usa um laço for each para percorrer os arquivos selecionados. (Como definimos Multiselect como False poderemos selecionar apenas um arquivo)
Agora no evento Click do botão - Acessar o Excel e Importar a Planilha para o DataGridView - temos o código abaixo:
Private Sub btnImportar_Click(sender As Object, e As EventArgs) Handles btnImportar.Click If String.IsNullOrWhiteSpace(txtCaminhoArquivoExcel.Text) Then
MessageBox.Show("Infome o caminho da planilha Excel", "Caminho Planilha", MessageBoxButtons.OK, MessageBoxIcon.Information)
Return
End If
If String.IsNullOrWhiteSpace(txtNomePlanilhaExcel.Text) Then
MessageBox.Show("Infome o nome da planilha Excel", "Nome Planilha", MessageBoxButtons.OK, MessageBoxIcon.Information)
Return
End If
Dim caminhoArquivoExcel As String = txtCaminhoArquivoExcel.Text
Dim nomePlanilhaExcel As String = txtNomePlanilhaExcel.Text & "$"
Dim conexaoOleDb As OleDbConnection = Nothing
Dim ds As DataSet
Dim cmd As OleDbDataAdapter
Try
conexaoOleDb = New OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & caminhoArquivoExcel & ";Extended Properties=Excel 8.0;")
cmd = New OleDbDataAdapter("Select * from [" & nomePlanilhaExcel & "]", conexaoOleDb)
cmd.TableMappings.Add("Table", "tabelaExcel")
ds = New DataSet
cmd.Fill(ds)
dgvDados.DataSource = ds.Tables(0)
Catch ex As Exception
MessageBox.Show(ex.ToString, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
conexaoOleDb.Close()
End Try
End Sub
|
O código verifica se o caminho e nome do arquivo Excel e o nome da planilha foram informados.
A seguir monta a string de conexão com o arquivo e extrai as informações em um DataSet que é exibido no controle DataGridView.
Se você pretende usar o Header a string de conexão dever ser definida assim:
conexaoOleDb =
New OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & caminhoArquivoExcel & ";Extended Properties='Excel 8.0;HDR=Yes'")Executando o projeto iremos obter o seguinte resultado:
1- Importando dados da planilha IDH
2- Importando dados da planilha Populacao
Pegue o projeto completo aqui:
LerPlanilhaExcel.zip
Porque também nós éramos noutro tempo insensatos, desobedientes, extraviados,
servindo a várias concupiscências e deleites, vivendo em malícia e inveja,
odiosos, odiando-nos uns aos outros.
Mas quando apareceu a benignidade e amor de Deus, nosso Salvador, para com os
homens,
Não pelas obras de justiça que houvéssemos feito, mas segundo a sua
misericórdia, nos salvou pela lavagem da regeneração e da renovação do Espírito
Santo,
Que abundantemente ele derramou sobre nós por Jesus Cristo nosso Salvador;
Para que, sendo justificados pela sua graça, sejamos feitos herdeiros segundo a
esperança da vida eterna.
Tito 3:3-7
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
FSO - Tratando drives, diretórios e arquivos - Macoratti.net