Jump to content
Sign in to follow this  
diego_10

[VB.NET] Importar excel to DataGridView

Recommended Posts

diego_10

Boas,

Gostava de importar um ficheiro excel para uma datagridview, já tenho um codigo que me corre e importa, mas alguns campos não esta a passar, alguem me consegue dar uma ajudinha nisto?

Este e o codigo que utilizo para importar o ficheiro excel:

Dim MyConnection As System.Data.OleDb.OleDbConnection
            Dim DtSet As System.Data.DataSet
            Dim MyCommand As System.Data.OleDb.OleDbDataAdapter
            MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & txtcaminho.Text & ";Extended Properties=Excel 8.0;")
            MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Folha1$]", MyConnection)
            MyCommand.TableMappings.Add("Table", "Net-informations.com")
            DtSet = New System.Data.DataSet
            MyCommand.Fill(DtSet)
            dgvReferencia.DataSource = DtSet.Tables(0)
            MyConnection.Close()
            MsgBox("A datagrid foi actualizada com sucesso!", MsgBoxStyle.Exclamation, "Informação")
            txtcaminho.Clear()

por exemplo :

IDCodigoFinal        Referencia        Descricao    WorkContent        Linha        Gap      Cliente    Projecto  CodigoCapa

1                            12345              asdasd1              1                        1            2          xpto        xpto            1234

2                            12345A            asdasd1234        1                        1            2          xpto        xpto            1234

No campo referencia quando e o id 1 importa caso tenha a letra ja nao carrega.

Cumps a todos

Share this post


Link to post
Share on other sites
renafi

É só nessa célula que tens esse problema? Tens a Grid com as colunas definidas, ou são criadas automaticamente?


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Share this post


Link to post
Share on other sites
diego_10

Boas,

A grid e carregada toda automatica.

Nessa e no CodigoCapa se tiver alguma letra já nao aparece. mas e apenas nessas duas.

Cumprimentos

Share this post


Link to post
Share on other sites
diego_10

Boas,

Reparei agora o seguinte:

Antes de fazer o import faço o export dos meus codigos da base de dados para excel, para estes serem tratados e serem importados para a grid para depois serem inseridos na base de dados.

Mas agora estava a reparar que quando faço o export os codigos que tem letras ficam alinhados a esquerda da celula e os outros ficam alinhados a direita.

Pode ter a ver com o export?

Cumps a todos!

Share this post


Link to post
Share on other sites
Caça

Se o valor que estas à espera existir naquela posição, ele tem que vir.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
diego_10

Boas Caça,

Sim ele existe e quando estou a fazer o export coloquei um breakpoint e ele passa para o excel, e ele esta la, quando faço o import ele nas referencias que tem letra fica em branco.

Como disse anteriormente depois de extrair para excel e tratar os dados as referencias que tem letras ficam ao lado esquerdo da celula e os que sao apenas numeros aparecem ao lado direito e sao apenas esses que aparecem no import.

Cumps

Share this post


Link to post
Share on other sites
Caça

Tenta importar de outra forma sem usar o OleDb Provider.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Caça

Tipo isto

Dim XL As Object
XL = CreateObject("Excel.Application")
With XL
    .Workbooks.Open("Caminho")
    For i = 1 To Total_Linhas_Existente_no_Excel
 Dgv1.Rows.Add(.Range("A" & i).Value, .Range("B" & i).Value, .Range("C" & i).Value, "etc...")
    Next
    .Workbooks.Close()
    .Quit()
End With


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
diego_10

Boas,

Mas isso nao vai fazer o que pretendo,

1 - Primeiro exporto duma datagrid

2 - edito os dados

3 - vou inserir numa datagrid para depois inserir para a base de dados

onde as minhas colunas sao todas criadas automaticamente com um data set para alimentar a datagrid.

Cumprimentos

Share this post


Link to post
Share on other sites
Caça

Em vez de importares para a grid, importa para o DataSet.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
diego_10

Boas,

Como disses t tentei colocar os valores para um dataset com este codigo mas na esta  a funcionar:


  Dim dts As New DataSet 
  'String de Conexão 
  Dim conexao As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
                          "Data Source=" & _ 
                          arquivo & _ 
                          ";Extended Properties=Excel 8.0;"
  'Comando SQL 
  Dim sql As String = "select * from [" + nomeAba + "]"
  Dim conn As OleDbConnection = Nothing

  Try
    conn = New OleDbConnection(conexao) 
    Dim cmd As New OleDbCommand(sql, conn) 
    Dim da As New OleDbDataAdapter(cmd) 
    'Aqui Preenchemos o DataSet 
    da.Fill(dts) 
  Catch ex As Exception 
    MessageBox.Show("Erro na Leitura do Arquivo.") 
  Finally
    If conn IsNot Nothing AndAlso conn.State = ConnectionState.Open Then
      conn.Close() 
    End If
  End Try

  Return dts 
End Function



Private Sub btnLer_Click(sender As System.Object, e As System.EventArgs) Handles btnLer.Click 

Dim arquivo As New OpenFileDialog 
  'Abrimos a seleção do arquivo excel 
  If arquivo.ShowDialog = Windows.Forms.DialogResult.OK Then
    dgvExcel.DataSource = LerExcel(arquivo.FileName, "Folha1$").Tables(0) 
  End If


End sub

Quando corro entra no catch e da-me o seguinte erro:

O moto de base de dados Microsfot Jet nao conseguiu abrir o ficheiro. Já foi aberto no modo exclusivo por outro utilizador ou necessita de permissão para ver os dados.

Cumprimentos a todos

Share this post


Link to post
Share on other sites
Caça

Eu disse para importares para o DataSet mas com o código que te dei.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
diego_10

Mas nao me chegas t a dar nenhum codigo para importar para um dataset, disses t apenas para colocar primeiro num dataset e depois carregar para a datagrid do dataset.

Cumps

Share this post


Link to post
Share on other sites
Caça

Tipo isto

Dim XL As Object
XL = CreateObject("Excel.Application")
With XL
    .Workbooks.Open("Caminho")
    For i = 1 To Total_Linhas_Existente_no_Excel
 Dgv1.Rows.Add(.Range("A" & i).Value, .Range("B" & i).Value, .Range("C" & i).Value, "etc...")
    Next
    .Workbooks.Close()
    .Quit()
End With

O código está aqui, em vez de adicionares directamente para a DataGridView, adiciona primeiro ao DataSet. Faz como quiseres, desta maneira só tens de criar manualmente as colunas.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.