vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Datenbanken · DataSet/DataTable   |   VB-Versionen: VB2005, VB200808.03.10
Excel-Dateien einfach auslesem mit OleDB

Eine einfache Funktion, mit der Excel-Dateien (.xls oder .xlsx) sehr einfach ausgelesen werden können.

Autor:   Joachim SiebertBewertung:  Views:  23.503 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Nachfolgend eine einfache Funktion, mit der Excel-Dateien (.xls oder .xlsx) sehr einfach ausgelesen werden können. Die Daten werden hierbei in ein DataTable-Objekt geladen, sodass die Daten dann mit dem Namen der Überschriftszeile abgerufen werden können ...

Imports System.IO
Imports System.Data.OleDb
Function xls2Datatable(ByVal Dateiname As String, ByVal Blattname As String) As DataTable
  If File.Exists(Dateiname) = False Then Return Nothing
 
  Dim FileInfo As FileInfo = New FileInfo(Dateiname)
  Dim DT As New DataTable
 
  Dim oConn As OleDbConnection = New OleDbConnection
  If Dateiname.Contains(".xlsx") Then
    oConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
      "Data Source=" & Dateiname & ";" & _
      "Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
  Else
    oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & Dateiname & ";" & _
      "Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
  End If
  oConn.Open()
 
  Dim cmd As OleDbCommand
  cmd = New OleDbCommand("SELECT * FROM [" & Blattname & "$]", oConn)
 
  Dim reader As OleDbDataReader = cmd.ExecuteReader( _
    CommandBehavior.KeyInfo Or CommandBehavior.CloseConnection)
  Dim schema As DataTable = reader.GetSchemaTable()
  Dim columns(schema.Rows.Count - 1) As DataColumn
  Dim column As DataColumn
 
  ' Build the schema for the table that will contain the data.
  For i As Integer = 0 To columns.GetUpperBound(0) Step 1
    column = New DataColumn
    With column
      .AllowDBNull = CBool(schema.Rows(i)("AllowDBNull"))
      .AutoIncrement = CBool(schema.Rows(i)("IsAutoIncrement"))
      .ColumnName = CStr(schema.Rows(i)("ColumnName"))
      .DataType = CType(schema.Rows(i)("DataType"), Type)
 
      If .DataType Is GetType(String) Then
        .MaxLength = CInt(schema.Rows(i)("ColumnSize"))
      End If
 
      .ReadOnly = CBool(schema.Rows(i)("IsReadOnly"))
      .Unique = CBool(schema.Rows(i)("IsUnique"))
    End With
    columns(i) = column
  Next i
 
  Dim data As New DataTable
  Dim row As DataRow
 
  data.Columns.AddRange(columns)
 
  ' Get the data itself.
  While reader.Read()
    row = data.NewRow()
 
    For i As Integer = 0 To columns.GetUpperBound(0)
      row(i) = reader(i)
    Next i
 
    data.Rows.Add(row)
  End While
 
  reader.Close()
  oConn.Close()
 
  Return data
End Function

Aufruf:

Dim DT As DataTable
DT = csv2Datatable("c:\Tabelle.xls", "Blatt1")
For Each dr As DataRow In DT.Rows
  TS = dr("ArtikelNummer") ' z.B. (Wert der Spalte "ArtikelNr")
  ' ... tu irgend was
Next 

Quellennachweis:
http://www.vbforums.com/showthread.php?t=381224



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.