Drag and Drop (przenoszenie danych z excela)

Jeśli widzieliście mój dział prognozowanie na pewno zwróciliście uwagę, że w swoich programach dałem możliwość szybkiego przenoszenia danych z excela. Jest to dosyć prosta metoda. Zaczynamy od dodania DataGridView do naszego projektu, od razu zmieniamy wartość we właściwościach DataGridView  „AllowDrop” na „True”:

zExcelaDoDatagridviewTeraz w zdarzeniach dla DatagridView znajdujemy dwa zdarzenia: „DragDrop”, „DragEnter”

zExcelaDoDatagridview2Tworzymy dla nich uchwyt poprzez dwukrotne kliknięcie na puste pole obok nich. DragEnter wypełniamy kodem:

    Private Sub DataGridView1_DragEnter(sender As Object, e As DragEventArgs) Handles DataGridView1.DragEnter
        Dim DostepnyFormat As String() = e.Data.GetFormats()

        'Sprawdź czy żądany format jest zawarty w obiekcie przeciągania
        If (e.Data.GetDataPresent("Text")) Then
            'Jeśli tak to skpiuje elementy
            e.Effect = DragDropEffects.Copy
        Else
            'Jeśli nie operacja zostanie zatrzymana
            e.Effect = DragDropEffects.None
        End If
    End Sub

Silnikiem całej naszej konstrukcji będzie DragDrop. Wystarczy wypełnić go kodem, starałem się zamieścić tłumaczenie w kodzie:

    Private Sub DataGridView1_DragDrop(sender As Object, e As DragEventArgs) Handles DataGridView1.DragDrop
        Dim tekst As String = e.Data.GetData("Text").ToString()
        'Tworzy tablice elementów pobranych z excela
        Dim parts As String() = tekst.Split(New String() {Environment.NewLine}, StringSplitOptions.None)

        'Tworzy kolumny dla naszych danych
        'Jeśli kolumny nie istnieją:
        If DataGridView1.ColumnCount = 0 Then
            DataGridView1.ColumnCount = 1
            Dim nazwaKolumny As String
            nazwaKolumny = InputBox("Wpisz nazwę nowej kolumny", "Nazwa kolumny", "")
            DataGridView1.Columns(0).Name = nazwaKolumny
        Else
            'Jeśli kolumny istnieją, doda nową i zapyta się o jej nazwę
            DataGridView1.ColumnCount = DataGridView1.ColumnCount + 1
            Dim nazwaKolumny As String
            nazwaKolumny = InputBox("Wpisz nazwę nowej kolumny", "Nazwa kolumny", "")
            DataGridView1.Columns(DataGridView1.ColumnCount - 1).Name = nazwaKolumny
        End If

        'Teraz musimy rozważyć kilka sytuacji
        ' 1. wierszy jest tyle co danych (wtedy poprostu wpiszemy dane w komórki)
        If DataGridView1.RowCount = parts.Count Then
            For i As Integer = 0 To parts.Length - 1
                DataGridView1.Rows(i).Cells(DataGridView1.ColumnCount - 1).Value = parts(i)
            Next
            '2 wierszy jest mniej niż danych (wtedy trzeba dodać brakujące wiersze 
            ' i wpisać w nie dane
        ElseIf DataGridView1.RowCount < parts.Count Then

            For i As Integer = 0 To parts.Length - 2 - DataGridView1.RowCount + 1
                DataGridView1.Rows.Add()
            Next
            For i As Integer = 0 To parts.Length - 1
                DataGridView1.Rows(i).Cells(DataGridView1.ColumnCount - 1).Value = parts(i)
            Next
            '3. Wierszy jest więcej niż danych (po prostu wpiszemy dane od początku)
        ElseIf DataGridView1.RowCount > parts.Count Then
            For i As Integer = 0 To parts.Length - 1
                DataGridView1.Rows(i).Cells(DataGridView1.ColumnCount - 1).Value = parts(i)
            Next
        End If

    End Sub

To by było na tyle 🙂 projekt do pobrania: Przenoszenie_elementow_z_excela

Permalink do tego artykułu: https://visualmonsters.cba.pl/drag-and-drop-przenoszenie-danych-z-excela/

Dodaj komentarz

Twój adres email nie będzie publikowany.