IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Copier un ficher xls dans un dataset


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut Copier un ficher xls dans un dataset
    Bonjour

    j'essai decopier un fichier xls dans un dataset
    le problème la premiere rangée du fichier xls n'est pas copiée
    j'ai nommé une feuille du classeur sheet1
    et rempli de A1 à C3 avec des nombres donc 9 data

    le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     Imports System.Data.OleDb
        Private dr As New DataSet
        Private Connection As New OleDbConnection
        Private Sub Initdb2()
            Try
                Connection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;" + "data source=E:\test.xls;Extended Properties=Excel 8.0;")
                Connection.Open()
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub
     
       Private Function GetDataFromExcel() As DataSet
            Dim sql As String
            Dim ObjetCommand As New OleDbCommand
            Dim da As OleDb.OleDbDataAdapter
            Dim ds As New DataSet
            Initdb2()
            sql = "select * from [sheet1$] "
            Try
                ObjetCommand = New OleDbCommand(sql)
                ObjetCommand.Connection() = Connection
                da = New OleDbDataAdapter(ObjetCommand)
                Connection.Close()
                da.Fill(ds, "Table")
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            Return ds
        End Function
     
      Private Sub CheckDataType()
     
            Dim r As DataRow
            Dim itemtypes As New List(Of String)
            For iterrow As Integer = 0 To dr.Tables("Table").Rows.Count - 1
                r = dr.Tables("Table").Rows(iterrow)
                For itercol As Integer = 0 To dr.Tables("Table").Columns.Count - 1
                    itemtypes.Add(r(itercol).GetType.FullName)
                Next
            Next
           'le bug 
           ' itemtypes contient que 6 élements au lieu de 9 
        End Sub
     
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
             dr = GetDataFromExcel()
             CheckDataType()
    end sub
    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Chargé de commercialisation
    Inscrit en
    Août 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé de commercialisation
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 46
    Par défaut
    Hum, je ne suis pas un grand connaisseur mais sauf si j'ai mal lu ton code, je pense qu'il ne prend pas la première ligne/colonne car il doit penser que c est le titre de ton tableau .... que tu mets dans un autre tableau ...

    où alors il recopie le titre quand même mais ne le passe pas en enregistrement.

    une piste en espérant que ça t’avance

    peut être as tu un problème dans tes compteurs .... il y a sans doute un n-1 à supprimer ou quelque chose du genre ....

    tu peux aussi utiliser le mode pas à pas pour voir si tes variables s'incrémente du bon point de départ et s’arrête bien à la valeur souhaitée

  3. #3
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    manuly : Je vois rien dans son code qui pourrait expliquer la perte de la première ligne tu peux développer ?

    Je vais essayer de tester cela
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  4. #4
    Membre Expert


    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 970
    Par défaut
    Voila J'ai testé (et trouvé)

    Il faut ajouter la propriété HDR=No à la connectstring pour spécifié que la première ligne de la feuille Excel est une ligne de données.

    Ce qui donne dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;" + "data source=E:\test.xls;Extended Properties=""Excel 8.0;HDR=No""")
    Articles sur les technologies .NET

    Une réponse vous a aidé ? utilisez le bouton

    Votre problème est résolu ? utilisez le bouton

  5. #5
    Membre émérite

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Par défaut
    merci infosam
    ça marche

  6. #6
    Membre actif
    Homme Profil pro
    Chargé de commercialisation
    Inscrit en
    Août 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé de commercialisation
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2013
    Messages : 46
    Par défaut
    ^^ désolé j'ai regardé le code en diagonal mais il n y avait que deux possibilités: soit la première ligne en titre soit une erreur d'index ( je n'ai fait qu'émettre deux hypothèses dont l'une s'est avérée juste mais que tu as su trouver).

    par contre je ne connaissais pas la fonction pour supprimer la premiere ligne en tant que titre!!

    content que tout ça soit solutionné en tout cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/02/2010, 17h01
  2. Copier des fichier *.xls dans une table POSTGRES
    Par halim-aman dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 30/06/2009, 19h26
  3. Réponses: 14
    Dernier message: 13/05/2008, 19h22
  4. [VB.NET] Copier un datatable dans un dataset
    Par olbi dans le forum VB.NET
    Réponses: 3
    Dernier message: 16/08/2007, 09h57
  5. [ADO.Net][VB.NET/C#]Comment importer .xls dans DataSet ?
    Par smedini dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/01/2006, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo