Excel-Tabelle in MFC-Programm einlesen



  • Hallo Zusammen

    Ich habe ein riesiges Problem, das mich fast zum Wahnsinn treibt.

    Mit Hilfe von CDatabase lese ich eine Excel-Tabelle in mein Programm ein.

    CString cszExcelFile= ...
    CString cszDriver   = "MICROSOFT EXCEL DRIVER (*.XLS)";
    CString cszSql;
    cszSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;DBQ=%s", cszDriver, cszExcelFile, cszExcelFile);
    
    CDatabase database;
    if( database.OpenEx(cszSql,CDatabase::noOdbcDialog) )
    {
     ....
    

    Jetzt habe ich 3 Excel-Files. Scheinbar sind sie alle genau gleich,
    aber nur mit einem funktioniert mein Programm.

    File1: "Test-Fehler beim Oeffnen.xls"
    -------------------------------------
    schon beim OpenEx() tritt ein Fehler auf!

    File2: "Test-letzen 8 Spalten nicht.xls"
    -------------------------------------
    die letzten 8 Spalten werden nicht eingelesen!

    File3: "Test-alles funktioniert.xls"
    -------------------------------------
    hier wird alles korrekt eingelesen!

    Warum funktionieren File1 + File2 nicht?

    !Wenn mir jemand helfen möchte, müsste ich ihm die 3 Excel-Files mailen!

    Für Hilfe wäre ich sehr dankbar

    Gruß
    storyteller

    +++++++++++++++++++++++++
    Excel 2000
    MFC Visual C++ 6.0
    Windows 2000 Prof.
    +++++++++++++++++++++++++



  • HiHo!

    Versuchs mal bitte mit diesem Code Schnippsel:

    #include "afxdb.h"
    
    .
    .
    .
    
    void XLS:XLS(void)
    {
    CDatabase database;
    CString szDriver, szDsn;
    CString szPathXls = "C:\\test.xls";
    
    szDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s", szDriver, szPathXls);
    
    TRY
    {
    database.Open(NULL,false,false,szDsn);
    
    // Hier dein Code...
    
    database.Close();
    
    }
    CATCH(CDBException, e)
    {
    
        // Wenn Fehler auftauschen, werden sie hier ausgegeben!
        AfxMessageBox("Datenfehler: "+e->m_strError, MB_ICONSTOP);
    }
    END_CATCH;
    }
    

    szDriver ist dein Treiber.

    Jetzt noch ein Wort zur Abfrage. Bitte Achte darauf, dass du Tabellen mit [Name&] abfragst. Es kann sein, dass deine Dateien nicht funktionieren, weil du ein Tabellenblatt abfragen möchtest und kein im SQL sinne TABLE.

    Bei fragen und möglichen Fehlern bitte nochmal posten, weil bin auch nur ein Mensch 😃

    Gruß Nixe



  • Hallo Nixe

    Vielen Dank für deine Antwort.

    Mit deinem Code passiert das Gleiche. Nur ein Excel-File kann richtig eingelesen werden.

    File1: "Test-Fehler beim Oeffnen.xls"
    -------------------------------------
    Fehlermeldung:
    Datenfehler: Das Microsoft Jet-Datenbankmodul konnte das Objekt 'Bonus' nicht finden. ...

    Die Tabelle 'Bonus existiert aber!

    Gruß
    storyteller



  • Hallo nochmal 🙂

    versuch mal:

    SELECT * FROM [Bonus$]

    Wie gesagt Excel unterscheidet zwischen ein Tabellenblatt und einer Tabelle.
    Mit der oben angegebenen Anweisung solle dein Fehler aber beseitigt werden. *hoff*

    Die "normalen" SQL Tabellen findest du unter Einfügen -> Namen -> Definieren.
    Diese kannst du dann mit eine normlen SQL-Anweisung abfragen.

    Ich hoffe, dass ich so weiterhelfen konnte.

    Bis bald 😉
    Nixe



  • Hallo Nixe

    Du bist genial 🙂
    Vielen Dank es klappt 😃

    Gruß
    storyteller



  • Hallo Nixe

    jetzt kann ich zwar die xls-Datei einlesen die vorher nicht
    zu öffnen war, aber wenn ich etwas in die xls-Datei reinschrieben möchte bekomme ich eine Fehlermeldung.

    "Datenfehler: Datentypen in Kriterienausdruck unverträglich"

    Wie muß der DSN-String aussehen und wie muß ich die DB öffnen?

    szDsn = ...
    
    database.Open( ...
    

    Vielen Dank!
    storyteller


Anmelden zum Antworten