Einlesen von 2003er Excel Dateien mit OLeDBDataAdapter

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Pinot schrieb:

    Beim fröhlichen Editieren im Code habe ich auch das "$" in der SQL Abfrage entfernt. Frag bitte nicht warum.
    Der Unterschied ist:
    Mit $ wird die ganze Tabelle geladen.
    Das sollte in deinem Fall richtig sein.

    Ohne $ versucht Excel aus der Tabellenstruktur die Felder intelligent zu laden.
    Da wird herausgefunden, dass du neun Spalten hast, die aus Zahlen bestehen.
    Für die erste Spalte findet er eine Überschrift, der Rest wird mit F2..F9 aufgefüllt, da in der ersten Zeile leer.
    Die Felder der zweiten und dritten Zeile passen im Format nicht zur automatisch erkannten Struktur (Zahlen) und werden deshalb leer befüllt.

    Beginne auf jeden Fall nochmals mit dem $-Ansatz, sonst bekommst du deine Header nie.

    Oder bearbeite die Datei vor dem Öffnen und lösche die erste Zeile.

    Und noch was:

    Pinot schrieb:

    "Installierbares ISAM nicht gefunden."
    Falsche Syntax, Extended Properties müssen bei mehr als einem Parameter gequotet werden.
    Aber das hast du doch schon mal gekonnt.

    Pinot schrieb:

    If headers Then
    con.ConnectionString += "Extended Properties=""Excel 8.0;HDR=Yes"""
    Else
    con.ConnectionString += "Extended Properties=""Excel 8.0;HDR=No"""
    End If

    Du musst eigentlich sogar nur noch den Parameter headers geeignet setzen.


    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Hier wird es intressant.
    Kann ich die automatisch erkannte Struktur durch eine vorgegebene ersetzen? Also egal was da steht, nimm Strings?

    petaod schrieb:

    passen im Format nicht zur automatisch erkannten Struktur (Zahlen


    Wie gesagt, der Code stammt von RodFromGermany, groß verstanden habe ich das noch nicht. Umsetzten konnte ich es aber:

    VB.NET-Quellcode

    1. connString = "provider=Microsoft.Jet.OLEDB.4.0; data source=" & path & "; Extended Properties=""Excel 8.0; HDR=No"""

    Baue ich die HDR= No ein, bleiben 3 Zeilen leer anstelle 2.soweit so gut.



    Ich kann das Messgerät überreden, mir die Exporte in einer Textdatei zu geben.Unabhängig davon: Exceldateien auszulesen ohne Excel geöffnet zu haben, hätte für mich riesigen Charme. Viele unsere Daten sind in Excel und dann noch 2003er Format.

    Pinot schrieb:

    Kann ich die automatisch erkannte Struktur durch eine vorgegebene ersetzen?
    Keine Ahnung, ob der ConnectionString so detailliert angegeben werden kann.
    Aber wie gesagt, nimm die $-Variante, dann wird der Automatismus nicht verwendet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod Kannst Du uns mal einen Schups in die richtige Richtung geben?
    Bei diesem Code hier (und $-Derivaten)

    VB.NET-Quellcode

    1. Dim sql As String = "SELECT * FROM [" & tableName & "$]"
    kommt stets
    Zusätzliche Informationen: Das Microsoft Access-Datenbankmodul konnte das Objekt 'Tabelle1$$' nicht finden. Stellen Sie sicher, dass das Objekt vorhanden ist und dass die Namens- und Pfadangaben richtig eingegeben wurden. Ist 'Tabelle1$$' kein lokales Objekt, sollten Sie die Netzwerkverbindung prüfen oder sich an den Serveradministrator wenden.
    Es sieht so aus, als wäre das $ bereits implizit vorhanden.
    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!
    @petaod: Ich nutze ja den '$' in der Abfrage ( Zeile 71 im gepostetn Code) Da klappt es ohne dem '$' überhaupt nicht. Die Sub LoadExcelFile wird verwendet.

    VB.NET-Quellcode

    1. myCommand = New OleDb.OleDbDataAdapter("select * from [" & table & "$]", myConnection)

    @edit: Hier fehlt noch der Constring für die obere Abfrage

    VB.NET-Quellcode

    1. connString = "provider=Microsoft.Jet.OLEDB.4.0; data source=" & path & "; Extended Properties=""Excel 8.0; HDR=No"""



    Verwende Ich Function GetExcelDataSet und füge dort der SQL Abfrage den '$' zu, bekomme ich gleiche Meldung wie RodFromGErmany (ist ja das gleiche Was RodfromGermany gemacht hat)
    Ich habe mal aus dem Code die Bildung des ConnectionString und die SQL Abfrage kopiert.

    VB.NET-Quellcode

    1. con.ConnectionString = "Data Source=" & excelFile & ";Provider=Microsoft.Jet.OLEDB.4.0;"
    2. con.ConnectionString += "Extended Properties=""Excel 8.0;HDR=No"""
    3. Dim sql As String = "SELECT * FROM [" & tableName & "$]"
    4. Dim adap As OleDbDataAdapter = New OleDbDataAdapter(sql, con)



    Wo ist denn der Unterschied zwischen diesen Vorgängen?