Excel Datei in Dataset einlesen



  • Hallo,

    ich habe ein vorhandenes C++/CLI Projekt und möchte eine Excel Liste einlesen. Leider habe ich keinerlei Erfahrung mit SQL Statements und stehe zurzeit ziemlich auf dem Schlauch. Vielleicht möchte mir jemand auf die Sprünge helfen...

    Mein aktuellster Versuch ist folgender:

    DataSet^ ds;
    			 OleDbConnection^ connection;
    			 OleDbDataAdapter^ adapter;
    			 String^ datei = "C://Kalk.xslx";			 
    			 String^ command = "select * from [Sheet1$]";
    			 connection = gcnew OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;"
                + "Data Source=C:\\Kalk.xlsx;"
                + "Extended Properties=\"Excel 12.0 Xml;HDR=YES\"");
    
    			 adapter = gcnew OleDbDataAdapter(command, connection);
    			 try  
                    {  
                        connection->Open();					
                        adapter->Fill(ds);  
                    }  
                    catch (Exception^ e)  
                    {  
    					MessageBox::Show(e->Message);  
                    }  
                    finally  
                    {  
                        connection->Close();  
                    }
    

    Zeile 14 wirft eine Ausnahme:
    Der Wert darf nicht NULL sein. Parametername: dataSet

    Meine Vermutung ist ein fehlerhafter ConnectionString bzw. ein falsches SQL Kommando.
    Was ich komisch finde: Selbst wenn ich die Datei umbenenne, wirft connection->Open() keine Ausnahme, obwohl die Datei dann gar nicht zu finden ist.

    Ist mein grundsätzliche Ansatz richtig? Oder sollte ich anders vorgehen?
    Mein Ziel wäre eine sich monatlich ändernde Datei (.xlsx) in ein gleichbleibendes .xml Format zu wandeln und über mein Programm auswerten zu lassen.

    Ich wäre für jeden konstruktiven Beitrag dankbar. 🙂



  • "Der Wert darf nicht NULL sein." bedeutet, daß du ein Objekt erstellen mußt:

    DataSet^ ds = gcnew DataSet();
    


  • 🙄 Oh, verdammt. Blöder Fehler.

    Die Exception ist damit verschwunden. Dennoch enthält das DataSet keine Daten.

    Zum Verständis:

    select * from [Sheet1$]
    

    bedeutet er holt sämtlichen Inhalt aus Blatt 1? Ist es dabei unerheblich wie der Titel des Blattes ist?
    Wie kann ich prüfen ob der ConnectionString überhaupt korrekt auf die Datei zeigt und der Zugriff erfolgt?
    Danke.

    Edit: Nutze Excel 2007, laut http://www.connectionstrings.com/ace-oledb-12-0/
    ist der ConnectionString korrekt. Wenn ich die Datei jetzt umbenenne gibt es eine Exception. Also ist der Verweis auf die Datei wohl richtig, oder?


Anmelden zum Antworten