FAQ-Wrapperklasse Excel Performance



  • Ich hab mich mit mal mit der Wrapper-Klasse für Excel beschäftigt.

    http://www.c-plusplus.net/forum/39259

    Die ist auch soweit relativ leicht zu benutzen, aber das ganze hat einen großen Nachteil.

    Jeder Zugriff auf eine Zelle kostet ca. 100ms ...

    Bekommt man das OLE-Gedöns eigentlich irgendwie auch schnell?
    Oder kann man mehrere Zellen gleichzeitig schreiben?

    Edit: Die Klasse bietet zwar die Funktion

    void __fastcall TMLWorksheet::SetCellString_Range(String Range,String Text)
    

    an, nur ist mir die Benutzung nicht klar..

    Um das nochmal zu präzisieren: Ich will mit einem Zugriff unterschiedliche Zellen mit unterschiedlichen Inhalten befüllen oder ersatzweise die derzeitigen Zugriffe deutlich schneller machen.



  • It0101 schrieb:

    Bekommt man das OLE-Gedöns eigentlich irgendwie auch schnell?

    Ja: indem man nicht die Late-binding-Schnittstelle benutzt. Importiere einfach die Excel-Typbibliothek (je nach Excel-Version liegt die dem C++Builder auch schon bei) via "Komponente|Importieren" und benutze die.



  • Ich hab das Problem über einen kleinen Umweg behoben.

    Ich kopiere die ZellInhalte entsprechend mit Tabulator ( '\t' ) und LineFeed ( '\n' ) in das Clipboard und mache dann quasi ein "Paste" in Excel. Vorher markiere ich noch die entsprechende Zelle, an der ich den Inhalt einfuegen will.

    Hier die Erweiterung die ich in den Wrapper geschrieben habe:

    void __fastcall TMLWorksheet::SetCellRange( const AnsiString &asText, int Col, int Row )
    {
        TClipboard *CB = Clipboard();
        if ( CB )
        {
            CB->AsText = asText;
            var_Sheet.OlePropertyGet("Cells", Row, Col ).OleFunction("Select");
            var_Sheet.OleProcedure("Paste");
        }
    }
    

    Edit:

    Performance habe ich mal getestet:

    Für 100.000, mit je 20 Zeichen, befüllte Zellen benötigt der Paste-Befehl ca. 200ms!



  • Danke audacia. Das werd ich auch mal versuchen.


Anmelden zum Antworten