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 :

Problème excel et datagridview


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien SAV
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SAV

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Par défaut Problème excel et datagridview
    Bonjour à tous,
    je viens demander de l'aide car après plusieurs jours de recherche "Google" je n'ai pas trouvé de solution.
    J'importe une feuille excel grâce au code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim mycon As System.Data.OleDb.OleDbConnection
    Dim Dst As System.Data.DataSet
    Dim mycomd As System.Data.OleDb.OleDbDataAdapter
     
    mycon = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=c:\TEST.xlsx;Extended Properties=""Excel 12.0 Xml;HDR=No""")
     
    mycomd = New System.Data.OleDb.OleDbDataAdapter("select * from [Feuille$]", mycon)
     
    mycomd.TableMappings.Add("Table", "TestTabe")
    Dst = New System.Data.DataSet
    mycomd.Fill(Dst)
     
    DataGridView1.DataSource = Dst.Tables(0)
    Mon problème c'est que dans dans ma feuille excel les textes ont des couleurs différentes. J'aimerai quand j'extrait le texte qu'il garde sa couleur.

    Est-ce que quelqu'un pourrait m'aider s'il vous plaît?
    Merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir
    Je ne sais pas comment faire avec ADO.NET, mais c'est possible avec AUTOMATION (interopérabilité) :
    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
            Dim xlApp As New xls.Application
            Dim xlBook As xls.Workbook
            Dim xlSheet As xls.Worksheet
     
            xlBook = xlApp.Workbooks.Open(Application.StartupPath & "\ex47.xlsx")
            xlSheet = CType(xlBook.Worksheets(1), xls.Worksheet)
     
            Dim c, l As Integer
            Dim xl As New xls.Application
            For l = 0 To DgvResult.Rows.Count - 1
                For c = 0 To DgvResult.Columns.Count - 1
                    Dim castRange As xls.Range = CType(xlSheet.Cells(l + 1, c + 1), xls.Range)
                    Dim forecolor As Color = System.Drawing.ColorTranslator.FromWin32(CInt(castRange.Font.Color))
                    Dim backColor As Color = System.Drawing.ColorTranslator.FromWin32(CInt(castRange.Interior.Color))
                    DataGridView1.Rows(l).Cells(c).Style.ForeColor = forecolor
                    DataGridView1.Rows(l).Cells(c).Style.BackColor = backColor
                Next
            Next
    avec l'import :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Imports xls = Microsoft.Office.Interop.Excel
    L'inconvéniant est que ce n'est pas très rapide et si le fichier Excel est gros ...
    Mais dans l'attente d'une réponse avec ADO.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien SAV
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SAV

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Par défaut
    Merci pour ta réponse chrismonoye
    J'ai voulu essayer ton code mais VS me dit que DgvResult n'est pas déclaré.
    Sinon pour le fichier excel il est assez gros. Il y a environ 15500 ligne et il doit peser dans les 15Mo.
    Ah oui j'avais oublié de dire que j'étais sous Visual Studio 2008.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    oui, oui, c'est une erreur de ma part :
    remplace DgvResult par DataGridView1 (si c'est bien le nom de ton DataGridview).

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien SAV
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SAV

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Par défaut
    Ok super ça fonctionne.
    Par contre très lent... trop lent
    Mais j'ai remarquer un truc. Au lieu de prendre cellule par cellule n'est-il-pas possible de mettre la couleur de la première cellule de la ligne à toutes les cellule de cette même ligne?
    J'ai essayé mais je n'y arrive pas.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    oui c'est possible ainsi toute la ligne sera du même style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            Dim l As Integer
            Dim xl As New xls.Application
            For l = 0 To DataGridView1.Rows.Count - 1
                Dim castRange As xls.Range = CType(xlSheet.Cells(l + 1, 1), xls.Range)
                Dim forecolor As Color = System.Drawing.ColorTranslator.FromWin32(CInt(castRange.Font.Color))
                Dim backColor As Color = System.Drawing.ColorTranslator.FromWin32(CInt(castRange.Interior.Color))
                DataGridView1.Rows(l).DefaultCellStyle.ForeColor = forecolor
                DataGridView1.Rows(l).DefaultCellStyle.BackColor = backColor
            Next
    Mais pour 15500 lignes, Automation demandera 50 secondes de traitement, environ.
    C'est très long. Trop long dans le thread de l'application.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien SAV
    Inscrit en
    Novembre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien SAV

    Informations forums :
    Inscription : Novembre 2011
    Messages : 6
    Par défaut
    Super fonctionne déjà mieux!! Effectivement encore lent mais ça ira.

    Dernière question est j'arrête de t'ennuyer
    J'aimerai quand j'import mon fichier excel que la taille des cellules soit les même.
    C'est possible?
    Si non c'est pas grave je ferai sans.

Discussions similaires

  1. problème EXCEL :graphique de nuage de points
    Par RIZOU dans le forum Excel
    Réponses: 1
    Dernier message: 20/04/2007, 09h00
  2. Pas d'idées pour ce problème | Excel |
    Par madnux dans le forum C++Builder
    Réponses: 10
    Dernier message: 30/03/2007, 18h40
  3. Problème EXCEL VBA
    Par olivierm34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/03/2007, 23h52
  4. [VB 2005] Problème Excel dans VB
    Par D4rkTiger dans le forum Windows Forms
    Réponses: 1
    Dernier message: 04/09/2006, 22h57
  5. Problème excel ole : propriété leftheader
    Par cchatelain dans le forum Langage
    Réponses: 1
    Dernier message: 10/01/2006, 16h42

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