Announcement

Collapse
No announcement yet.

Excel und OLE

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Excel und OLE

    <b>Hallo</b><p>
    Ich versuche aus einem Stringgrid Daten an Excel zu übergeben habe aber ein kleines Problem dabei.
    Bei wenigen Spalten im Stringgrid hat das Programm kein Problem damit die Daten mittels OLE an Excel zu übergeben.
    Aber bei vielen Zeilen( 100 - 10000) meldet er mir den Fehler

    'OLE-Fehler 800a03EC'
    Woran liegt das?<p>
    Dazu findest sich eine im Processmanager immer noch Excel obwahl das Programm geschlossen wird!
    Wo liegt Fehler?<p>

    Hier der Quellcodeabschnitt der Probleme macht<p>
    uses comobj;<p>
    {$R *.DFM}<p>
    var Excel : Variant;<p>
    ...............<p>
    var x, zeile, spalte: Integer;<p>
    var app : variant;<p>
    begin<p>
    x:=100; //Variable eingelesen
    try<p>
    Excel := CreateOleObject('Excel.Application');<p>
    except<p>
    ShowMessage('Excel konnte nicht gestartet werden !');<p>
    Exit;<p>
    end;<p>
    Excel.Workbooks.Add;<p>
    For zeile := 1 to 7 do<p>
    for spalte := 1 to x do<p>
    Excel.Cells[zeile, spalte].Value := stringgrid1.cells[spalte-1,zeile-1];<p>
    Excel.Visible := true;<p><p>

    p.s. Ich arbeite mit Win98SE und Delphi5 und MS Excel 2000
    habe es aber auch unter NT4 r.3 und MS Excel 97 getest!<p>

    Hoffe es kann mir jemand helfen!!<p>

    Irfan Düzgün

  • #2
    Hallo, <br>
    zu deinem ersten Problem: <br>
    Excel ist wahrscheinlich nicht in der lage mehr als 255 Zeilen je Zelle anzulegen. <br>
    (kannst du auch durch Eingabe von 255 Zeilen von Hand testen) <br>
    durch den Versuch mehr Zeilen anzulegen wird wohl der OleFehler ausgelöst. <br> <br>
    zu deinem zweiten Problem: <br>
    wenn du während der Ausführung deines Programms eine Fehlermeldung bekommst und das Programm abbrichst<br>
    ist das Excel-Objekt noch vorhanden!!! <br>
    Eine Möglichkeit das zu umgehen:<br> <br>
    try <br>Excel.Workbooks.Add;<br> For zeile := 1 to 7 do<br> for spalte := 1 to x do<br>
    Excel.Cells[zeile, spalte].Value := stringgrid1.cells[spalte-1,zeile-1]; <br>Excel.Visible := true;<br>
    except<br>Excel.Visible; (oder: Excel.Quit <br> ShowMessage('Bei der Ausführung von Excel ist ein Fehler aufgetreten');
    <br> end;<br><br>Hat aber den Nachteil, daß du nicht weißt welcher Fehler aufgetreten is

    Comment


    • #3
      Hi Andreas<p>
      In jeder Zelle steht nur eine Zeile (String und/oder Integer)!
      Es sollen aber sehr viele Zellen angelegt und mit den Daten gefüllt werden.
      Ich schätze die Daten werden richtig übergeben, die Frage ist nur wieviel Daten Ich auf einmal übergeben darf?
      Muß Ich mich in meinem Programm darum kümmern, daß Excel geschlossen wird, oder reicht es wenn ich Excel
      mittels Beenden Knopf schließe?

      Irfan Düzgün<p&gt

      Comment


      • #4
        Hallo Irfan, <br><br>

        laut Quelltext sollte die Übergabe der Daten funktionieren. <br>
        Aber Excel stellt nur 255 Spalten zur Verfügung d.h. wenn x > 255 ist mußt du Dir wohl etwass anderes einfallen lassen. <br>
        z.B., wenn möglich, Zeilen und Spalten tauschen.<br>
        Dein Ole Fehler wird beim beschreiben der 256 Spalte auftreten<br>
        um das zu Überprüfen setze die Excel.Visible:= true; Anweisung doch mal vor die Schleife, dann siehst du wo er abbricht.<br>
        Auf die Frage wieviel Daten du ausgeben kannst kann ich dir nur sagen, daß ich unter Win95 ca. 13-16 Tabellen ausgeben kann, <br> (mit vielen Daten und Strichen) und unter Win98 und Win NT beliebig viele (bis jetzt).<br>
        Wenn dein Programm die Datenausgabe FehlerfreiI durchführt kannst du Excel ohne ProgrammCode schließen.<br>
        Tritt jedoch beim Zugriff vom Programm auf Excel ein Fehler auf mußt du Excel anzeigen lassen (visible:= true) oder<br>
        Excel beenden(Excel.Quit) wenn es noch nicht sichtbar ist

        Comment

        Working...
        X