Copier/Coller entre Excel et un dataGridView
Hello 8-)
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 !!!
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:
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...
:pc: Bon codage...