von Excel in Datagriview kopieren

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    von Excel in Datagriview kopieren

    Guten Morgen, ich möchte von einer Excel Tabelle in ein Datagridview kopieren.

    Der DGV hat 4 Spalten und 10 Zeilen. (fest vorgegeben)
    Nun möchte ich wenn ich von Excel Daten kopiere, dass diese genauso in das Grid kopiert werden. sollte die Excel Range grösser sein, soll er den "Rest" löschen bzw. einfach nicht einfügen.

    Ich habe schon gegoogelt, den einen oder anderen Code auch gefunden. Leider spricht das KeyDown Ereignis nicht an wenn ich eine Taste drücke.

    Quellcode

    1. Private Sub DataGridView1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DataGridView1.KeyDown
    2. If e.Control AndAlso e.KeyCode = Keys.V Then
    3. Try
    4. For Each line As String In Clipboard.GetText.Split(vbNewLine)
    5. Dim item() As String = line.Trim.Split(vbTab)
    6. If item.Length = Me.DataGridView1.ColumnCount Then
    7. Me.DataGridView1.Rows.Add(item)
    8. End If
    9. Next
    10. Catch ex As Exception
    11. MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
    12. End Try
    13. End If
    14. End Sub



    Jmd eine gute lösung?

    Vielen Dank
    Wo kommt der Code nicht weiter? Bei mir schlägt das Ereignis an, wenn ich im DGV bin und Strg+V drücke. Der Code ist dahingehend ungünstig, dass er Deine Bedingung nicht erfüllt:

    r0tzi schrieb:

    sollte die Excel Range grösser sein, soll er den "Rest" löschen bzw. einfach nicht einfügen.
    Der Code prüft, ob ExcelCopyRange und DGV-Spaltenzahl zusammen passen. Ansonsten wird der Import effektiv abgebrochen. Also nix mit Abschneiden.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hi,

    das Keydown wird bei mir nicht ausgelöst... vllt liegt es an der Formatierung des Grid. hast du die spalten fest angezeigt? ich möchte ja keine neuen spalten und Zeilen adden lassen, sondern abschneiden.

    Ja klar, den Code habe ich im netz gefunden mal als Anhaltspunkt, wenn das keydown Ereignis aber nicht anspricht bei der fest formatierten Tabelle, bringt mir der code leider nichts.

    Das der obige code angepasst werden müsste ist klar.
    Steht im Designer bei den Events des DataGridViews denn was drin im KeyDown Event?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Hi ja klar, da steht das event drin.. es spricht aber nicht an.
    hab was gefunden.

    Quellcode

    1. Private
    2. Sub DataGridView1_EditingControlShowing(sender As System.Object, e As
    3. System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles
    4. DataGridView1.EditingControlShowing
    5. AddHandler e.Control.KeyDown, AddressOf cell_KeyDown
    6. End Sub
    7. Private Sub cell_KeyDown(sender As Object, e As KeyEventArgs)
    8. If e.KeyCode = Keys.Space Then
    9. MessageBox.Show("Success")
    10. End If
    11. End Sub


    damit spricht das event wieder an. super. nun weiss ich nur leider nicht, wie ich alles dass es mit excel überein stimmt.
    kann
    mir da wer helfen? also es sollen keine neuen spalten oder zellen
    eingefügt werden. wenn das im zwischenspeicher zu gross ist, soll es nur
    bis zum tabellenrand eingefügt werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!