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 klapptGruß
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