xlsx-Datei und Microsoft.Jet.OLEDB.4.0 auslesen

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

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    xlsx-Datei und Microsoft.Jet.OLEDB.4.0 auslesen

    Moin Leute,
    ich lese eine XLSX-Tabelle mit folgendem Code aus:

    VB.NET-Quellcode

    1. Private Function LoadExcelFile(path As String, table As String) As DataSet
    2. Dim dtSet As DataSet = Nothing
    3. Try
    4. Using myConnection = New OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; " & _
    5. "data source=" & path & "; " & _
    6. "Extended Properties=Excel 8.0;")
    7. Dim myCommand As OleDb.OleDbDataAdapter
    8. myCommand = New OleDb.OleDbDataAdapter("select * from [" & table & "$]", myConnection)
    9. myCommand.TableMappings.Add("Table", "TestTable")
    10. dtSet = New DataSet
    11. myCommand.Fill(dtSet)
    12. 'Me.DataGridView1.DataSource = dtSet.Tables(0)
    13. myConnection.Close()
    14. End Using
    15. Catch ex As Exception
    16. MessageBox.Show(ex.Message.ToString)
    17. End Try
    18. Return dtSet
    19. End Function
    Wenn die entsprechende XLSX-Tabelle im Excel geöffnet ist, geht das ganze problemlos.
    Liegt die Tabelle im XLS-Format vor geht das ganze ebenfalls problemlos.
    Ist die XLSX-Tabelle nicht geöffnet, kommt die Exception

    OleDbException schrieb:

    Die externe Tabelle hat nicht das erwartete Format.
    Was muss ich ändern, damit das ganze im xlsx-Format und ohne Excel funktioniert?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So weit ich weis, muss man bei Arbeitsmappen ab 2007 einen anderen Provider Microsoft.ACE.OLEDB.12.0 verwenden.

    VB.NET-Quellcode

    1. Using myConnection = New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & path & "; Extended Properties=Excel 12.0 Xml; HDR=Yes")
    2. 'div. Code
    3. End Using

    Eventuell den Zusatz HDR=Yes (die erste Zeile als Tabellenkopf behandeln) noch hinzufügen...
    OK. Den

    VB1963 schrieb:

    anderen Provider
    müsste ich mir installieren.
    -----
    1. Schritt: Installieren erforderlicher Office-Komponenten. Da kommt der nächste Fehler, ich geh weiter auf Suche.
    Bilder
    • OleDB.png

      12,62 kB, 475×169, 289 mal angesehen
    • OleDb2.png

      8,21 kB, 233×154, 5.200 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

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

    Hab's gefunden, Dein Appendix von oben muss weg und schon geht es:

    VB.NET-Quellcode

    1. Dim connString As String
    2. If path.ToLower.EndsWith(".xlsx") Then
    3. connString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & path & "; Extended Properties=Excel 12.0" ' Xml; HDR=Yes; IMEX=1;"
    4. Else
    5. connString = "provider=Microsoft.Jet.OLEDB.4.0; data source=" & path & "; Extended Properties=Excel 8.0;"
    6. End If

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany
    Nur der Vollständigkeithalber - da gehören beim Appendix noch die Quotes in den String eingefügt - dann müsste es eigentlich so funktionieren...

    connString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & path & "; Extended Properties=""Excel 12.0 Xml; HDR=YES; IMEX=1"";"

    Excel in DataGridView importieren (Hinweis von Petaod)