Einlesen Excel-Tabelle

  • VB.NET
  • .NET (FX) 4.0

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von vbanfaenger.

    Einlesen Excel-Tabelle

    Bei dem Versuch, eine Excel-Tabelle einzulesen, erhalte ich einen Syntax-Fehler. Welcher Guru kann mir einen Tipp geben?

    VB.NET-Quellcode

    1. Imports System
    2. Imports System.Data
    3. Imports System.Data.OleDb
    4. Dim pfadinput as string
    5. Dim eingabedatei as string
    6. pfadinput = "C:\Ordnerxyz"
    7. eingabedatei = "ExcelTabelle.xls"
    8. myData = pfadinput + "\" + eingabedatei
    9. Dim ds As New DataSet()
    10. Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    11. "Data Source=mydata;" & "Extended Properties=Excel 8.0;"
    12. Dim excelData As New OleDbDataAdapter("SELECT * FROM Tabelle1$", connectionString)
    13. 'j1 = 0
    14. Try
    15. excelData.Fill(ds)
    16. Catch ex As OleDb.OleDbException
    17. MsgBox("Hier kommt der Syntaxfehler!")
    18. MsgBox(ex.Message)
    19. 'j1 = 1
    20. End Try


    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „vbanfaenger“ ()

    dazu musste deinen Beitrag bearbeiten.
    Ist ein neues dolles Feature vom Forum, dass man den Button zum Bearbeiten erst sieht, wenn man mit der Maus über seinem eigenen Beitrag steht.

    aber soviel kann schon gesagt werden, dass die Messagebox falsch ist.
    erstens kommt dort der fehler nicht, sondern er kommt vmtl. 2 Zeilen drüber, zweitens kommt glaub kein Syntax-Fehler, es sei denn die Sql-Syntax ist falsch, aber so falsch sieht die mir auffm ersten Blick nicht auf.

    also 2 Tipps: 1) mach den Trycatch weg, damit der Fehler da kommt wo er kommt: TryCatch ist ein heißes Eisen
    2) 5 Regeln für sinnvolle Fragen - Fehlermeldung (evtl. auch die der InnerException)?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Mit'm Cursor über deinen Beitrag hovern und dann auf den erschienenen "Bearbeiten"-Button klicken. Dort sind auch die Buttons für Beanstandungen, Zitate, Hilfreich's und "Nach oben"...

    EDIT: EDR war schneller... :|

    EDIT2: Das hier funktioniert höchstens in VS:

    VB.NET-Quellcode

    1. Parallel.For(0, 1, Sub(x) VBPThread.Create("Excel Tabelle auslesen", "blablabla"))

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Higlav“ ()

    Also wenn die Werte aus deiner Excel-Tabelle nun im DataSet vorhanden sind,
    dann kannst du zB diese zB in einer DataGridView anzeigen lassen.


    Hast du die Daten allerdings noch nicht im DataSet, dann würde ich dir dringlichst empfehlen die Such-Funktion des Forums zu nutzen!
    Es gibt sehr viele, die auch schon mal etwas von Excel auslesen wollten und hier eine Lösung fanden!
    Dafür muss aber nicht immer ein neues Thema geöffnet werden!!!

    Also nutz die SuFu. (Hier könnte schon die Lösung deines Problems liegen: VB.Net Excel Daten in Dataset speichern und dann Dataset in Access DB reinschreiben, Speichert NICHT)

    vbanfaenger schrieb:

    Backslash in mydata ist leider nicht sichtbar. Pfadangabe ist eine Variable und stimmt.


    Das wage ich zu bezweifeln. So würde das schon gehen:

    VB.NET-Quellcode

    1. myData = System.IO.Path.Combine(pfadinput, eingabedatei)
    2. Dim ds As New DataSet()
    3. Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
    4. "Data Source=" & myData & ";" & "Extended Properties=Excel 8.0;"


    Wobei es Dich dann aber trotzdem zerreist mit Deinem Code, was dann aber nicht mehr an der Syntax liegt.
    Sieh Dir die letzte (Halb-)Zeile im Codeblock an:
    Bei Dir: "Data Source=mydata;" & "Extended Properties=Excel 8.0;"
    Bei mir: "Data Source=" & myData & ";" & "Extended Properties=Excel 8.0;"

    Ich bekomme mit Deinem Code einen Syntaxfehler, was Du ja auch als Fehler genannt hattest. Nach der Änderung bekomme ich keinen Syntaxfehler mehr, der Code läuft weiter. Nicht weit allerdings :D , da hast Du noch mehr zu tun am Code.

    Zur Version:

    VB.NET-Quellcode

    1. If Path.GetExtension(myData) = ".xls" Then
    2. conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myData& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2"" "
    3. ElseIf Path.GetExtension(FilePath) = ".xlsx" Then
    4. conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & myData& ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;';"
    5. Else
    6. Return
    7. End If


    Das hier in Verbindung mit dieser Seite sollte Dir helfen.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Dksksm“ ()

    Vielen Dank dksksm,

    der Hinweis brachte die Wende. Mein Code sieht jetzt so aus:

    VB.NET-Quellcode

    1. Dim worksheetname As String
    2. worksheetname = "Tabelle1"
    3. myData = System.IO.Path.Combine(pfadinput, eingabedatei)
    4. Dim connectionString As String = String.Format("provider=Microsoft.Jet.OLEDB.4.0; data source={0};Extended Properties=""Excel 8.0;HDR=No;IMEX=2""", myData)
    5. Dim query As String = String.Format("SELECT * FROM [{0}$]", workSheetName)
    6. Dim data As New DataSet()
    7. Using con As New OleDbConnection(connectionString)
    8. con.Open()
    9. Dim adapter As New OleDbDataAdapter(query, con)
    10. adapter.Fill(data)
    11. End Using
    12. Dim dt As New DataTable
    13. dt = data.Tables(0)
    14. If dt.Rows.Count < 1 Then
    15. Else
    16. For Each dtr As DataRow In dt.Rows
    17. satzart = CInt(dtr(1))
    18. Next
    19. End If


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „vbanfaenger“ ()

    Ich dachte ja eher so:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim oledbConn As OleDbConnection
    2. If Path.GetExtension(myData) = ".xls" Then
    3. oledbConn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myData & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=2""")
    4. ElseIf Path.GetExtension(myData) = ".xlsx" Then
    5. oledbConn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & myData & ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;';")
    6. Else
    7. Return
    8. End If
    9. oledbConn.Open()
    10. Dim cmdExcel As New OleDbCommand()
    11. Dim oda As New OleDbDataAdapter()
    12. Dim dt As New DataTable()
    13. cmdExcel.Connection = oledbConn
    14. 'Get the name of First Sheet
    15. Dim dtExcelSchema As DataTable
    16. dtExcelSchema = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
    17. Dim SheetName As String = dtExcelSchema.Rows(0)("TABLE_NAME").ToString()
    18. oledbConn.Close()
    19. 'Read Data from First Sheet
    20. oledbConn.Open()
    21. cmdExcel.CommandText = "SELECT * From [" & SheetName & "]"
    22. oda.SelectCommand = cmdExcel
    23. oda.Fill(dt)
    24. oledbConn.Close()
    25. 'Bind Data to DataGridView
    26. DataGridView1.DataSource = dt