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

Windows Forms Discussion :

Copier/Coller entre Excel et un dataGridView


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Points : 144
    Points
    144
    Par défaut Copier/Coller entre Excel et un dataGridView
    Hello

    J'ai besoin de transférer des données entre un fichier Excel et un dataGridView.

    Dans le sens dataGridView => Excel, ça fonctionne bien : le C/C respecte parfaitement le nombre et la disposition des cases.

    Dans l'autre par contre PROBLEME ! Le contenu de toutes les cases copiées dans Excel se retrouve dans une seule case du dataGridView ...

    Merci pour vos conseils !!!

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut On ne peut pas tout avoir du premier coup...
    Effectivement, ce control (dataGridView) permet d'effectuer (tout de même) pas mal d'opérations évitant une programmation fastidieuse, mais, on ne peut pas tout avoir du premier coup...

    Déjà, les données contenues dans le presse papier à partir du collage Excel ne sont pas forcément dans le format attendu par le composant.

    Normalement, on devrait avoir du texte tabulé, suivant la version d'Excel...

    Pour cela, utiliser l'utilitaire fourni avec Windows : clipbrd.exe dans %SystemRoot%\System32\ pour savoir à quoi l'on a à faire dans le presse papier windows.

    De plus, cette fonction n'est peut-être pas prévue dans le modèle texte du dataGridView concernant la gestion du coller dans un ensemble de cellules, ce qui peut paraitre logique, vu le caractère dynamique du composant.

    Le plus simple est donc de faire appel à l'objet Clipboard (System.Windows.Forms) en passant par la méthode GetDataObject()

    Comme dans cet exemple :

    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
     
    Dim data_object As IDataObject = Clipboard.GetDataObject
     
        If data_object.GetDataPresent(DataFormats.Rtf) Then
            rchTarget.Rtf = _
                data_object.GetData(DataFormats.Rtf).ToString
            lblRtf.Text = _
                data_object.GetData(DataFormats.Rtf).ToString
        Else
            rchTarget.Text = ""
            lblRtf.Text = ""
        End If
     
        If data_object.GetDataPresent(DataFormats.Text) Then
            lblTarget.Text = _
                data_object.GetData(DataFormats.Text).ToString
        Else
            lblTarget.Text = ""
        End If
     
        If data_object.GetDataPresent(DataFormats.Html) Then
            lblHtml.Text = _
                data_object.GetData(DataFormats.Html).ToString
        Else
            lblHtml.Text = ""
        End If
    Ensuite, il faut naturellement coder le collage pour chaque cellule par rapport aux données...

    Encore, reste-t-il à savoir si c'est vraiment le but recherché et si il n'existe pas une manière plus élégante d'arriver à ses fins en important le fichier Excel, par exemple, dans la base de données, et en rafraichissant simplement le control.... Ou en proposant une barre d'outil avec le bouton Coller à partir d'excel... Ou sur l'évènement DataGrid_Validating et/ou en proposant un ContextMenu personnalisé sur le clic droit... Bref, les choix sont vastes...

    Bon codage...

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Merci Olimatou pour ta réponse détaillée !

    Ca confirme tout d’abord qu’il va falloir passer par du codage et qu’il n’y a pas a priori de fonction prédéfinie …

    Je pensais aussi exploiter le contenu du Clipboard : il semblerait qu’en utilisant la méthode Clipboard.GetText() on obtienne une chaîne de caractères dans laquelle :

    • Une tabulation ("\t") corresponde à un passage à la case suivante (à droite)
    • Un retour chariot ("\r") corresponde à un passage à la ligne suivante.

    Je pense donc écrire quelques lignes de code en ce sens ...

    Le problème est de savoir si cette règle est toujours vraie ou si elle change d’une version à l’autre d’Excel …

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    En fait, le retour chariot est "\r\n" ...

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    Je remonte ce sujet car j'utilise actuellement ce système pour copier des données à partir d'Excel dans mon appli.
    Mais mon soucis et que le clipboard ne récupère que la valeur d'affichage d'une cellule Excel et non sa vrai valeur.

    Savez vous comment pouvoir récupérer la valeur d'une cellule excel par copier/coller et non la valeur formatée.

    Merci d'avance.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 264
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par Jere76 Voir le message
    Bonjour,

    Je remonte ce sujet car j'utilise actuellement ce système pour copier des données à partir d'Excel dans mon appli.
    Mais mon soucis et que le clipboard ne récupère que la valeur d'affichage d'une cellule Excel et non sa vrai valeur.

    Savez vous comment pouvoir récupérer la valeur d'une cellule excel par copier/coller et non la valeur formatée.

    Merci d'avance.
    Euh, qu'entends tu par vrai valeur ??? La formule de la cellule ?

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    par exemple pour une valeur flottante :
    On peux avoir en valeur 2.5598764 et en affichage 2.56

    Lors du copier coller, c'est la valeur 2.56 qui est mise dans le clipboard et je n'arrive pas à récupérer la valeur exacte.

  8. #8
    Membre à l'essai
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    Je cherche actuellement à faire un copier/coller entre un fichier Excel et mon dataGridView dans le sens dataGridView => fichier Excel.
    En fait je voudrais juste savoir s'il y avait un moyen pour le dataGridView de détecter le copiage de données?

    Merci pour votre aide.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 85
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Points : 9
    Points
    9
    Par défaut Copier dans Excel
    Il y a encore plus bête : CopyClip board puis copie dans excel : c'est parfait (EnableAlwaysIncludeHeaderText) copie les en tête.

    With BanquesDataGridView
    .SelectAll()
    .Refresh()
    Clipboard.Clear()
    .ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText 'EnableWithAutoHeaderText
    Try
    Clipboard.SetDataObject(.GetClipboardContent())
    Catch ex As System.Runtime.InteropServices.ExternalException
    MsgBox("17 Le PressePapier n'est pas accessible.Essayez à nouveau !")
    End Try
    'Efface l'écran en déplacant la cellule sélectionnée.
    .CurrentCell = .Rows(3).Cells(1)
    .CurrentCell = .Rows(3).Cells(2)
    End With

Discussions similaires

  1. [XL-2007] Copier/coller vers Excel d'une chaine entre parenthèses
    Par alers dans le forum Excel
    Réponses: 5
    Dernier message: 10/06/2013, 12h56
  2. Copier / Coller entre 2 fichiers excel
    Par roberto75 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/03/2011, 12h25
  3. Copier coller entre deux fichiers excel par macro
    Par miss-o-21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2009, 14h45
  4. Copier - Coller de Excel vers un datagridview
    Par sylchar dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 28/03/2007, 10h26
  5. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08

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