[Excel]OLE-Fehler 800A01A8
-
Hallo, ich bekomme diesen Fehler beim auslesen einer Zelle der Exceldatei.
//--------------------------------------------------------------------------- #pragma hdrstop #include "Excel.h" //--------------------------------------------------------------------------- #pragma package(smart_init) //--------------------------------------------------------------------------- Excel::Excel(AnsiString Mappe_Pfad, AnsiString excelName ,bool check) { if( !testeTabelle(Mappe_Pfad) ) { throw("Die Excel-Datei ist fehlerhaft!"); } Excel_Var = Variant::CreateObject("Excel.Application"); Excel_Var.OlePropertyGet("ActiveWorkBook"); Excel_Var.OlePropertyGet("WorkBooks").OleFunction("Open",Mappe_Pfad.c_str()); Sheet=Excel_Var.OlePropertyGet("ActiveSheet"); minThrow = Sheet.OlePropertyGet("Cells",3,2).OlePropertyGet("Value"); maxThrow = Sheet.OlePropertyGet("Cells",4,2).OlePropertyGet("Value"); if( check ) { if( !checkTabelle() ) { throw("Die Excel-Datei ist fehlerhaft!"); } } bool weiter = true; for(int i = 8; weiter; i ++) { AnsiString d = Sheet.OlePropertyGet("Cells",i,1).OlePropertyGet("Value"); if( d.Length() == 0 ) { werteAnzahl = i-9; //-1 da eine Zelle nach dem letzten Wert und -8 wegen Startwert i weiter = false; } } } //--------------------------------------------------------------------------- AnsiString Excel::getLinse() { return (AnsiString)Sheet.OlePropertyGet("Cells",2,2).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- int Excel::getThrowMin() { return minThrow; } //--------------------------------------------------------------------------- int Excel::getThrowMax() { return maxThrow; } //--------------------------------------------------------------------------- int Excel::getAnzahlWerte() { return werteAnzahl; } //--------------------------------------------------------------------------- int Excel::getThrow(int n) { if( n > werteAnzahl || n < 0 ) { return -1; } return (int)Sheet.OlePropertyGet("Cells",n+8,1).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- double Excel::getResolution(int n) { if( n > werteAnzahl || n < 0 ) { return -1; } return (int)Sheet.OlePropertyGet("Cells",n+8,2).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- double Excel::getCoverage(int n) { if( n > werteAnzahl || n < 0 ) { return -1; } return (int)Sheet.OlePropertyGet("Cells",n+8,3).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- double Excel::getMinElementPreferred_015(int n) { if( n > werteAnzahl || n < 0 ) { return -1; } return (int)Sheet.OlePropertyGet("Cells",n+8,4).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- double Excel::getMinElementAbsolute_015(int n) { if( n > werteAnzahl || n < 0 ) { return -1; } return (int)Sheet.OlePropertyGet("Cells",n+8,5).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- double Excel::getMinElementPreferred_1545(int n) { if( n > werteAnzahl || n < 0 ) { return -1; } return (int)Sheet.OlePropertyGet("Cells",n+8,6).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- double Excel::getMinElementAbsolute_1545(int n) { if( n > werteAnzahl || n < 0 ) { return -1; } return (int)Sheet.OlePropertyGet("Cells",n+8,7).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- double Excel::getMaxBeltSpeed_StandardDecoder(int n) { if( n > werteAnzahl || n < 0 || !StandardDecoder() ) { return -1; } return (int)Sheet.OlePropertyGet("Cells",n+8,8).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- double Excel::getMaxBeltSpeed_HighspeedDecoder(int n) { if( n > werteAnzahl || n < 0 || !HighspeedDecoder() ) { return -1; } return (int)Sheet.OlePropertyGet("Cells",n+8,9).OlePropertyGet("Value"); } //--------------------------------------------------------------------------- bool Excel::StandardDecoder() { AnsiString d = Sheet.OlePropertyGet("Cells",8,8).OlePropertyGet("Value"); if( d.Length() == 0 ) { return false; } else { return true; } } //--------------------------------------------------------------------------- bool Excel::HighspeedDecoder() { AnsiString d = Sheet.OlePropertyGet("Cells",8,9).OlePropertyGet("Value"); if( d.Length() == 0 ) { return false; } else { return true; } } //--------------------------------------------------------------------------- int Excel::getPositionByThrow(int thr) { for(int i = 0; i < 101; i ++) { if( getThrow(i) == thr ) { return i; } } return -1; } //--------------------------------------------------------------------------- bool Excel::checkTabelle() { bool weiter = true; int int1,int2,int3,int4,int5,int6,int7,int8,int9,int10,int11,int12; for(int i = 0; weiter; i ++) { AnsiString d = (AnsiString)Sheet.OlePropertyGet("Cells",i+8,1).OlePropertyGet("Value"); if( d.Length() == 0 ) { int1 = i; weiter = false; } } weiter = true; for(int i = 0; weiter; i ++) { AnsiString d = (AnsiString)Sheet.OlePropertyGet("Cells",i+8,2).OlePropertyGet("Value"); if( d.Length() == 0 ) { int2 = i; weiter = false; } } weiter = true; for(int i = 0; weiter; i ++) { AnsiString d = (AnsiString)Sheet.OlePropertyGet("Cells",i+8,3).OlePropertyGet("Value"); if( d.Length() == 0 ) { int3 = i; weiter = false; } } weiter = true; for(int i = 0; weiter; i ++) { AnsiString d = (AnsiString)Sheet.OlePropertyGet("Cells",i+8,4).OlePropertyGet("Value"); if( d.Length() == 0 ) { int4 = i; weiter = false; } } weiter = true; for(int i = 0; weiter; i ++) { AnsiString d = (AnsiString)Sheet.OlePropertyGet("Cells",i+8,5).OlePropertyGet("Value"); if( d.Length() == 0 ) { int5 = i; weiter = false; } } weiter = true; for(int i = 0; weiter; i ++) { AnsiString d = (AnsiString)Sheet.OlePropertyGet("Cells",i+8,6).OlePropertyGet("Value"); if( d.Length() == 0 ) { int6 = i; weiter = false; } } weiter = true; for(int i = 0; weiter; i ++) { AnsiString d = (AnsiString)Sheet.OlePropertyGet("Cells",i+8,7).OlePropertyGet("Value"); if( d.Length() == 0 ) { int7 = i; weiter = false; } } weiter = true; for(int i = 0; weiter; i ++) { AnsiString d = (AnsiString)Sheet.OlePropertyGet("Cells",i+8,8).OlePropertyGet("Value"); if( d.Length() == 0 ) { int8 = i; weiter = false; } } weiter = true; for(int i = 0; weiter; i ++) { AnsiString d = (AnsiString)Sheet.OlePropertyGet("Cells",i+8,9).OlePropertyGet("Value"); if( d.Length() == 0 ) { int9 = i; weiter = false; } } AnsiString i10,i11,i12; i10 = Sheet.OlePropertyGet("Cells",2,2).OlePropertyGet("Value"); i11 = Sheet.OlePropertyGet("Cells",3,2).OlePropertyGet("Value"); i12 = Sheet.OlePropertyGet("Cells",4,2).OlePropertyGet("Value"); int10 = i10.Length(); int11 = i11.Length(); int12 = i12.Length(); if( int1 == int2 && int1 == int3 && int1 == int4 && int1 == int5 && int1 == int6 && int1 == int7 && (int1 == int8 || int1 == int9) && int2 == int3 && int2 == int4 && int2 == int5 && int2 == int6 && int2 == int7 && (int2 == int8 || int2 == int9) && int3 == int4 && int3 == int5 && int3 == int6 && int3 == int7 && (int3 == int8 || int3 == int9) && int4 == int5 && int4 == int6 && int4 == int7 && (int4 == int8 || int4 == int9) && int5 == int6 && int5 == int7 && (int5 == int8 || int5 == int9) && int6 == int7 && (int6 == int8 || int6 == int9) && int10 > 0 && int11 > 0 && int12 > 0 ) { return true; }else{ return false; } } //--------------------------------------------------------------------------- Excel::~Excel() { try { Excel_Var.OleProcedure("Quit"); } catch(...) { AnsiString meldung = "Die Excel-Datei \"" + excelDatei + "\" konnte nicht geschlossen werden!"; throw(meldung); } } //--------------------------------------------------------------------------- AnsiString Excel::getExcelDateiName() { return excelDatei; } //--------------------------------------------------------------------------- bool Excel::testeTabelle(AnsiString pfad) { Variant dummy; bool f = false; try{ dummy = Variant::CreateObject("Excel.Application"); dummy.OlePropertyGet("ActiveWorkBook"); dummy.OlePropertyGet("WorkBooks").OleFunction("Open",pfad.c_str()); }catch(...) { f = true; } try{ dummy.OleProcedure("Quit"); } catch(...) {} return !f; } //--------------------------------------------------------------------------- void Excel::Close() { try { Excel_Var.OleProcedure("Quit"); } catch(...) { AnsiString meldung = "Die Excel-Datei \"" + excelDatei + "\" konnte nicht geschlossen werden!"; throw(meldung); } } //---------------------------------------------------------------------------Und hier der Aufruf:
if( /*Nahbereich*/ a_coverage <= mappen[currMappe].getCoverage(wo) && mappen[currMappe].getThrow(wo) >= mappen[currMappe].getThrowMin() && mappen[currMappe].getThrow(wo) <= mappen[currMappe].getThrowMax() && a_beltspeed <= mappen[currMappe].getMaxBeltSpeed_StandardDecoder(wo) /*Fernbereich*/ && a_coverage <= mappen[currMappe].getCoverage(i) && mappen[currMappe].getThrow(i) >= mappen[currMappe].getThrowMin() && mappen[currMappe].getThrow(i) <= mappen[currMappe].getThrowMax() && a_beltspeed <= mappen[currMappe].getMaxBeltSpeed_StandardDecoder(i) && ( ( a_minel >= mappen[currMappe].getMinElementPreferred_015(wo) && a_minel >= mappen[currMappe].getMinElementPreferred_015(i) ) || ( a_minel >= mappen[currMappe].getMinElementPreferred_1545(wo) && a_minel >= mappen[currMappe].getMinElementPreferred_1545(i) ) || ( !optimiert?(a_minel >= mappen[currMappe].getMinElementAbsolute_015(wo) && a_minel >= mappen[currMappe].getMinElementAbsolute_015(i)):false ) || ( !optimiert?(a_minel >= mappen[currMappe].getMinElementPreferred_1545(wo) && a_minel >= mappen[currMappe].getMinElementPreferred_1545(i)):false ) ) ) //...thx
-
hola
liest du vielleicht aus einer leeren zelle ?
treiber probleme vielleicht ?
waere im WINAPI subforum bestimmmt besser aufgehoben.
wie seiht die fehlermeldung genau aus ? nurOLE-Fehler 800A01A8?
Meep Meep
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
liest du vielleicht aus einer leeren zelle ?
Hatte ich mir auch schon gedacht, werds gleich mal testen.
treiber probleme vielleicht ?
Glaub ich nicht, hab ja schon mal aus der Datei gelesen.
waere im WINAPI subforum bestimmmt besser aufgehoben.
Wäre möglich aber: Siehe Vorpost

wie seiht die fehlermeldung genau aus ? nur
Code:
OLE-Fehler 800A01A8
Code:
OLE-Fehler 800A01A8?
Jap, nur das.
-
Irgendwie scheint es an meinem Vektor zu liegen, mache ich das nämlich ohne Vektor geht es wunderbar...
TStringList *mappenliste = sucheNachEndung("xls"); for(int i = 0; i < mappenliste->Count; i ++) { AnsiString datei = mappenliste->Strings[i]; datei = getProgDir() + datei.SubString(1,datei.Pos("xls")-2); mappen.push_back(Excel(datei,mappenliste->Strings[i],true)); } AnsiString dummy = (AnsiString)mappen[0].getCellValue(1,1); //0, da hier im test sicher ist dass es eine Tab. gibt Application->MessageBox(dummy.c_str(),"DEBUG",MB_ICONINFORMATION);Werte auslesen geht nicht, aber mache ich es so:
AnsiString datei = mappenliste->Strings[0]; datei = getProgDir() + datei.SubString(1,datei.Pos("xls")-2); Excel e = Excel(datei,mappenliste->Strings[0],true); AnsiString dummy = (AnsiString)e.getCellValue(1,1); Application->MessageBox(dummy.c_str(),"DEBUG",MB_ICONINFORMATION);geht es
-
Gelöst
Excel *e = new Excel(datei,mappenliste->Strings[i],true) mappen.push_back(e);