Problem mit Excel-Anbindung



  • Hallo,

    ich habe nach dem Lesen einiger FAQ´s versucht EXCEL über OLE anzusteuern.
    Ich verwende den Borland C++ Builder 6 und Excel 97.
    Testweise habe ich einfach mal folgenden code verwendet

    #include <ComObj.hpp>
    #include <utilcls.h>
    
    Variant Excel;
    
      try
      {
        Excel = GetActiveOleObject("Excel.Application");
      }
        catch(...)
      {
        Excel = CreateObject("Excel.Application");
      }
    
      Excel.OlePropertySet("Visible", true);
    

    Er springt aber schon bei Zeile 5 raus mit der Meldung:
    "... ist eine Exception der Klasse EAccessviolation aufgetreten.
    Meldung: "Zugriffsverletzung bei Adresse..."

    Hat jemand eine Idee woran das liegen könnte? 😕 😕 😕



  • Sorry ich meine in Zeile 9 fliegt er schon raus.
    Also bei

    Excel = GetActiveOleObject("Excel.Application");
    

    Er geht aber nicht in die Catch Anweisung um Excel frisch zu öffnen.
    Wenn ich die Zeile mit GetActive... weglasse springt er dann halt bei der Anweisung

    Excel = CreateOleObject("Excel.Application");
    

    raus.



  • Hallo,

    passiert das auch wenn du die fertig kompilierte Anwendung startest? (Der Code ist in Ordnung)

    mfg, Micha!



  • Hi,

    ja, das passiert auch wenn ich die kompilierte exe starte.
    Schon merkwürdig, gibt es noch alternativen zur OLE-Variante?
    Und wenn ja, wie funktionieren die? Ich komme mit den Excelkomponenten vom Builder nicht sorecht klar.



  • Nimm doch statt der Office-Komponenten lieber die in der FAQ beschriebene Klasse. Da werden die Zugriffe schön gekapselt.



  • Naja aber die die Klasse verwendet doch auch wieder OLE-Objekte, dann läuft es doch wieder auf das selbe hinaus.
    Aber ich versuchs mal damit.

    Abgesehen davon habe ich jetzt mal mit der ExcelApplication Komponente hantiert.
    Folgender Code:

    ExcelApplication1->Connect();
       ExcelApplication1->set_Visible(true,true);
       ExcelApplication1->Workbooks->Add();
    

    bewirkt zwar, dass excel sich öffnet aber nicht sichtbar wird (also nur im taskmanager ist die Excel.exe angegeben)

    Idee?



  • halleluja mit der Klasse, die Braunstein angesprochen hat scheint es wirklich zu funktionieren.
    Also zumindest öffnet sich das Excel mal sichtbar.
    Der Rest sollte jetzt auch zu schaffen sein 😉
    Danke für die Hilfe



  • Ok zu früh gefreut.

    Excel =new TMLExcel;
      Excel->Connect;
      Excel->Visible=true;
      Excel->NewWorkbook();
    

    Excel öffnet sich und wird sichtbar, aber bei "NewWorkbook" springt er raus mit der Meldung "Unbekannter Name"

    Ich will eigentlich blos Excel aufmachen und eine Textfile damit öffnen.
    Das kann doch nich so ein Umstand sein.
    Ich hoffe von euch hat noch jemand einen Tipp.



  • Die Funktion NewWorkbook in der FAQ ist fehlerhaft. Sie muß so aussehen.

    void TMLExcel::NewWorkbook()
    {
       if( Connect)
       {
    	  var_Excel.OlePropertyGet("WorkBooks").OleFunction("Add");
    	  UpdateBookList();
       }
    }
    //----------------------------------------------------------------------------
    

    Wass soll bei dir dieses

    Excel->Connect;
    

    bewirken? Die Zeile ist sinnlos.



  • Braunstein schrieb:

    Die Funktion NewWorkbook in der FAQ ist fehlerhaft.

    Danke, ist korrigiert.



  • Danke Braunstein, jetzt gehts.
    Das Connect hatte ich aus purer Verzweiflung einfach mal ausprobiert.
    Einfach nicht beachten 😉


Anmelden zum Antworten