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