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:
Form 1:
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
- Option Explicit On
- Option Strict On
- Imports Microsoft.Office.Interop.Excel
- Public Class c_Excel
- #Region "Excel Tabellen"
- Public Class Tabellen
- ''' <summary>
- ''' Liest alle Tabellendaten einer Excel Datei aus und erstellt daraus ein Dataset. Im DataSet werden dann pro Tabellenblatt ein Datatabel erzeugt.
- ''' </summary>
- ''' <param name="_Datei">Der komplette Pfad (Als String) wo sich die Excel Datei befindet.</param>
- ''' <param name="_DataSet_Name">Name des DataSet (als String)</param>
- ''' <returns>DataSet mit allen Daten der Excel Datei</returns>
- ''' <remarks></remarks>
- Public Shared Function Inhalte_Ermitteln(ByVal _Datei As String, ByVal _DataSet_Name As String) As DataSet
- Dim ds As New DataSet(_DataSet_Name)
- Dim _excel As Application = New Application
- Dim w As Workbook = _excel.Workbooks.Open(_Datei)
- 'Alle Tabellen der Excel Tabelle durchlaufen
- For i As Integer = 1 To w.Sheets.Count
- 'Tabellenbaltt der Excel Datei ermitteln
- Dim ws_1 As Worksheet = CType(w.Sheets(i), Worksheet)
- Dim _Tabellenblatt As String = ws_1.Name.ToString
- 'Datatabel im Dataset erstellen. Der DataTabel Name wird vom Tabellenblatt-Name der Excel Datei genommen
- Dim dt As New System.Data.DataTable
- dt = ds.Tables.Add(_Tabellenblatt)
- 'Zeilen im Datatabel erstellen
- Dim col As DataColumn
- col = dt.Columns.Add("Kunden_Id", GetType(System.Int32))
- col.AllowDBNull = False
- col.AutoIncrement = True
- col.AutoIncrementStep = 1
- col.Unique = True
- With dt.Columns
- .Add("Kunde", GetType(System.String))
- .Add("Name", GetType(System.String))
- End With
- 'Alle Cellen der Excel Datei in ein 2 Dimensionales Array einlesen
- Dim r As Range = ws_1.UsedRange
- Dim array(,) As Object = CType(r.Value(XlRangeValueDataType.xlRangeValueDefault), Object(,))
- Dim bound0 As Integer = array.GetUpperBound(0) 'Zeilen gesamt des Excel Tabellenbalttes ermitteln
- ' Alle Zeilen der Excel Tabelle(Tabellenblatt) durchlaufen und Inhalt in das DataTabel schreiben
- For j As Integer = 2 To bound0 'Erst in der 2 Zeile anfangen, da in er 1 die Zeile die Spalten Beschriftung ist.
- Dim _newRow As DataRow = ds.Tables(_Tabellenblatt).NewRow
- _newRow("Kunde") = array(j, 1)
- _newRow("Name") = array(j, 2)
- dt.Rows.Add(_newRow)
- Next
- Next
- w.Close()
- Return ds
- End Function
- End Class
- #End Region
- End Class
Form 1: