Excel Datei in DGV laden, Sortieren+Trennen und Speichern

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Excel Datei in DGV laden, Sortieren+Trennen und Speichern

    Guten Tag,

    ich weiß die Überschrift ist nicht grade gut, doch mir viel nichts besseres zum Thema ein.

    Hier erstmal mein bisheriger Code:

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class Form1
    3. Dim Excel_Datei As String
    4. Dim Ordner_Pfad As String
    5. Dim Blatt_Name As String
    6. Dim Überschrift As String
    7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    8. OpenFileDialog1.ShowDialog()
    9. TextBox1.Text = OpenFileDialog1.FileName
    10. End Sub
    11. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    12. FolderBrowserDialog1.ShowDialog()
    13. TextBox2.Text = FolderBrowserDialog1.SelectedPath
    14. End Sub
    15. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    16. If Not TextBox1.Text = "" And Not TextBox2.Text = "" And Not TextBox3.Text = "" Then
    17. Excel_Datei = TextBox1.Text
    18. Ordner_Pfad = TextBox2.Text
    19. Blatt_Name = TextBox3.Text
    20. If CheckBox1.CheckState = CheckState.Checked Then
    21. Überschrift = "Yes"
    22. Else
    23. Überschrift = "No"
    24. End If
    25. Dim dtSheet1 As New DataTable
    26. Using cn As New System.Data.OleDb.OleDbConnection
    27. Dim Builder As New OleDbConnectionStringBuilder With _
    28. { _
    29. .DataSource = Excel_Datei, _
    30. .Provider = "Microsoft.ACE.OLEDB.12.0" _
    31. }
    32. Builder.Add("Extended Properties", "Excel 12.0; IMEX=1;HDR=" & Überschrift & ";")
    33. cn.ConnectionString = Builder.ConnectionString
    34. cn.Open()
    35. Using cmd As OleDbCommand = New OleDbCommand With {.Connection = cn}
    36. cmd.CommandText = "SELECT * FROM [" & Blatt_Name & "$]"
    37. Dim dr As System.Data.IDataReader = cmd.ExecuteReader
    38. dtSheet1.Load(dr)
    39. DataGridView1.DataSource = dtSheet1
    40. End Using
    41. End Using
    42. Else
    43. MsgBox("Sie haben mindestens eins der drei Felder leer gelassen.")
    44. End If
    45. End Sub
    46. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    47. 'Hier fehlt der Code :('
    48. End Sub
    49. End Class


    Das Programm soll zur erstellung der Riegen unserer Schule genutzt werden. Ich bin im Moment soweit, dass die Daten aus der Schülerdatenbank (bereits in eine *xlsx Datei exportiert) in ein DGV importiert werden. Nun sollen die Daten aus dem DGV nach Geburtsjahr (Zwischen Start Jahrgang und End Jahrgang) in jeweils einzelne Excel Dateien exportiert werden. Also eine Datei für alle im Jahr 1998 geborenen, eine für alle 1997er, usw. Und hier stoße ich an mein Problem. Ich habe nämlich keine Ahnung wie ich dies Realisieren könnte.

    Für jegliche Hilfe währe ich Euch sehr verbunden.

    P.S. Zur Hilfe habe ich ein Bild angehangen. (Button1 = Erste Button auf der Form usw.)

    MfG

    minnimichi
    Bilder
    • Unbenannt.jpg

      80,47 kB, 772×736, 165 mal angesehen
    Ich will mich ja nicht stur stellen und Euch die Arbeit machen lassen, aber das hat mir nicht geholfen. Ich habe diesen Beitrag bereits gelesen und bin auch den Links gefolgt. Doch leider helfen die mir auch nicht weiter. Ich bin halt noch ein bisschen noobig in Sachen VB aber würde mir gerne helfen lassen. (Beim Lernen natürlich)
    Hey, hab jetzt ein bissl rumprobiert und in dem bereitsgenutzt Code zum auslesen der Excel Datei ins DGV,

    VB.NET-Quellcode

    1. Using cn As New System.Data.OleDb.OleDbConnection
    2. Dim Builder As New OleDbConnectionStringBuilder With _
    3. { _
    4. .DataSource = Excel_Datei, _
    5. .Provider = "Microsoft.ACE.OLEDB.12.0" _
    6. }
    7. Builder.Add("Extended Properties", "Excel 12.0; IMEX=1;HDR=No;")
    8. cn.ConnectionString = Builder.ConnectionString
    9. cn.Open()
    10. Using cmd As OleDbCommand = New OleDbCommand With {.Connection = cn}
    11. cmd.CommandText = "SELECT F1, F2, F3, CDate(F4), F5, F6 FROM [" & Blatt_Name & "$] WHERE CDate(F4)=''"
    12. Dim dr As System.Data.IDataReader = cmd.ExecuteReader
    13. dtSheet1.Load(dr)
    14. DataGridView1.DataSource = dtSheet1
    15. End Using
    16. End Using

    auf die "cmd.CommandText" zeile aufmerksam geworden. Vorher war es "cmd.CommandText = "SELECT * FROM [" & Blatt_Name & "$]"" und jetzt habe ich die abfrage halt so, wie oben zu sehen, abgeändert das ich mit einer Variable Filtern könnte. Jetzt ist nur die Frage, gibt es eine andere möglichkeit F4 abzufragen als mit CDate(F4)? Es stehen dort halt termine im Format tt.mm.jjjj. Wenn ich nämlich F4 so abfrage und dann in F4 suchen will, kriege ich immer ein leeres DGV. Bzw wie soll ich nacher suchen WENN ich wirklich mit CDate() abfrage. Weil bei CDate(F4) findet er nichts.

    Vielen Dank schonmal im vorraus,

    minnimichi