Excel Datei auslesen und in DataSet speichern

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

    Excel Datei auslesen und in DataSet speichern

    Hallo zusammen,

    folgende Problemstellung:
    Es sollen alle Daten aus einer Excel Datei ausgelesen und in ein Dataset geschrieben werden.
    Die Namen der Excel Spalten sind bekannt.Wie viele Tabellen-Blätter die Excel Datei besitzt bzw. wie diese heißen ist im Vorfeld nicht bekannt.

    Also funktionieren tut der Code, zumindest was ich feststellen konnte.

    Normalerweise arbeite ich mit dem DataSet Designer und erstelle mir im Vorfeld die DataTabels.
    Aber wie integriere ich sowas in einer Klasse?
    Müsste ich dann das vorhandene DataSet der Klasse übergeben?

    Also schaut euch den Code bitte mal an und gebt mir Rückinfo was man anders bzw. besser machen könnte.

    Die Klasse:

    VB.NET-Quellcode

    1. Option Explicit On
    2. Option Strict On
    3. Imports Microsoft.Office.Interop.Excel
    4. Public Class c_Excel
    5. #Region "Excel Tabellen"
    6. Public Class Tabellen
    7. ''' <summary>
    8. ''' Liest alle Tabellendaten einer Excel Datei aus und erstellt daraus ein Dataset. Im DataSet werden dann pro Tabellenblatt ein Datatabel erzeugt.
    9. ''' </summary>
    10. ''' <param name="_Datei">Der komplette Pfad (Als String) wo sich die Excel Datei befindet.</param>
    11. ''' <param name="_DataSet_Name">Name des DataSet (als String)</param>
    12. ''' <returns>DataSet mit allen Daten der Excel Datei</returns>
    13. ''' <remarks></remarks>
    14. Public Shared Function Inhalte_Ermitteln(ByVal _Datei As String, ByVal _DataSet_Name As String) As DataSet
    15. Dim ds As New DataSet(_DataSet_Name)
    16. Dim _excel As Application = New Application
    17. Dim w As Workbook = _excel.Workbooks.Open(_Datei)
    18. 'Alle Tabellen der Excel Tabelle durchlaufen
    19. For i As Integer = 1 To w.Sheets.Count
    20. 'Tabellenbaltt der Excel Datei ermitteln
    21. Dim ws_1 As Worksheet = CType(w.Sheets(i), Worksheet)
    22. Dim _Tabellenblatt As String = ws_1.Name.ToString
    23. 'Datatabel im Dataset erstellen. Der DataTabel Name wird vom Tabellenblatt-Name der Excel Datei genommen
    24. Dim dt As New System.Data.DataTable
    25. dt = ds.Tables.Add(_Tabellenblatt)
    26. 'Zeilen im Datatabel erstellen
    27. Dim col As DataColumn
    28. col = dt.Columns.Add("Kunden_Id", GetType(System.Int32))
    29. col.AllowDBNull = False
    30. col.AutoIncrement = True
    31. col.AutoIncrementStep = 1
    32. col.Unique = True
    33. With dt.Columns
    34. .Add("Kunde", GetType(System.String))
    35. .Add("Name", GetType(System.String))
    36. End With
    37. 'Alle Cellen der Excel Datei in ein 2 Dimensionales Array einlesen
    38. Dim r As Range = ws_1.UsedRange
    39. Dim array(,) As Object = CType(r.Value(XlRangeValueDataType.xlRangeValueDefault), Object(,))
    40. Dim bound0 As Integer = array.GetUpperBound(0) 'Zeilen gesamt des Excel Tabellenbalttes ermitteln
    41. ' Alle Zeilen der Excel Tabelle(Tabellenblatt) durchlaufen und Inhalt in das DataTabel schreiben
    42. For j As Integer = 2 To bound0 'Erst in der 2 Zeile anfangen, da in er 1 die Zeile die Spalten Beschriftung ist.
    43. Dim _newRow As DataRow = ds.Tables(_Tabellenblatt).NewRow
    44. _newRow("Kunde") = array(j, 1)
    45. _newRow("Name") = array(j, 2)
    46. dt.Rows.Add(_newRow)
    47. Next
    48. Next
    49. w.Close()
    50. Return ds
    51. End Function
    52. End Class
    53. #End Region
    54. End Class



    Form 1:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim ds As New DataSet
    3. ds = c_Excel.Tabellen.Inhalte_Ermitteln(My.Application.Info.DirectoryPath & "\" & "Test.xlsx", "Kundenliste")
    4. DataGrid1.DataSource = ds
    5. End Sub
    Bilder
    • Form1.JPG

      14,25 kB, 312×185, 466 mal angesehen
    • Form1_2.JPG

      20,19 kB, 487×163, 438 mal angesehen
    • Excel.JPG

      48,26 kB, 349×875, 418 mal angesehen