[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 ? nur

    OLE-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);
    

Anmelden zum Antworten