![]() |
Excel-ole richtig Freigeben
So ich hoffe das ist hier die richtige Kategorie, sonst könnte das bitte jemand verschieben.
Mein Problem: Ich schreibe ein Programm, das eine Exceldatei öffnen soll, dann einen Wert eintragen, und dann drucken soll. Das funktioniert auch wunderbar. Wenn ich das Ausgeführt habe bleibt allerdings immer ein Excelprozess im Taskmanager erhalten. Hoffe ihr könnt mir helfen woran das liegt; und wie ich es ändern kann. Hier ein Ausschnitt aus meinem Programm.
Code:
procedure TForm1.btndruckenClick(Sender: TObject);
var i: Integer; begin // Excel starten try Excel := CreateOleObject('Excel.Application'); except ShowMessage('Excel konnte nicht gestartet werden!'); Exit; end; // Laden //Excel.workbooks.Add('Test'); Excel.workbooks.open(edtspeicherort.Text); Excel.visible := true; // und drucken for i := 0 to High(daten) do begin Excel.Cells[1,1].Value := daten[i]; Excel.worksheets.Printout; end; //Sleep(1000); Excel.Activeworkbook.saved := True; Excel.workbooks.close; Excel.quit; Excel := unassigned; end; |
Re: Excel-ole richtig Freigeben
Versuch mal das hier:
Delphi-Quellcode:
Damit lässt du den Druckdialog anzeigen und Excel kann geschlossen werden.
.PrintOut(Background := false);
Ich hatte das Problem bei einer Word-Steuerung, aber ich denke bei Excel müsste das auch so gehen. Nur was ich nicht verstehe ist, warum das mit deinem sleep dann nicht ging... Versuchs einfach mal und meld dich, obs geklappt hat oder nicht. lg fishly |
Re: Excel-ole richtig Freigeben
Also nicht das ihr mich falsch versteht:
das Programm funktioniert so wie es hier steht. Das Problem: hinterher bleibt im Taskmanager noch ein Excel-Prozess übrig der den Arbeitsspeicher zumüllt. Das sleep funktioniert auch. Das hab ich bloß wieder auskommentiert. Das war nur zum Prüfen drin. Ich probier deinen Tipp mal aus, aber ich weiß noch nicht ganz wie mir das weiterhelfen soll.. ;) PS: mit deinem Code stürtzt das Programm ab ;) geht anscheinend nicht mit excel. |
Re: Excel-ole richtig Freigeben
Warum machst du am Ende nicht einfach
Delphi-Quellcode:
?
Excel.Free;
Grüße, blauweiss |
Re: Excel-ole richtig Freigeben
Zitat:
Das einzige was man damit free-en könnte wäre die Verbindung. |
Re: Excel-ole richtig Freigeben
Ich hatte genau dein Problem und es durch folgende Zeile gelöst!
versuchs doch mal mit activeworkbook.print und nicht mit dem was du da hast
Delphi-Quellcode:
lg fishly
WordApp.ActiveDocument.PrintOut(Background := false, Append := false, Range := wdPrintAllPages);
|
Re: Excel-ole richtig Freigeben
Äh ok das werde ich mal probieren, aber es geht doch um die Übergleibsel des Programms, nicht um das Drucken, das geht ja.
PS Habs getestet. Den letzten Parameter wollte er erst garnicht nehmen und nachdem ich den gelöscht habe ist er abgeschmiert. Aber nochmal: das Drucken geht ! |
Re: Excel-ole richtig Freigeben
Ich sags dir doch. Ich hatte genau das gleiche Problem.
Die Excel-Fenster (bzw. bei mir Word) waren alle zu, aber der Prozess ist noch gelaufen. Wenn das bei dir auch so ist, denke ich, dass es sich um dasselbe Problem handelt... Und bei mir lag das am Drucken! Wenn das bei dir dasgleiche Problem ist, dann mach den Drucken-Teil mal aus der procedure raus und guck dann obs geht... Wenns doch ein anderes Problem war, gib noch mal Bescheid; dann hab ich dich tatsächlich falsch verstanden. lg fishly |
Re: Excel-ole richtig Freigeben
Ok tut mir leid das ich dir da Unrecht getan habe ;) Ich hatte das nur nicht richtig verstanden. Wenn ich den Drucken Teil raus nehme geht es.
Jetzt ist nur die Frage wie das richtig funktioniert. Dein Vorschlag ging ja leider nicht. PS Ok also danke nochmal! Ich habe das Problem jetzt gelößt. Mit
Delphi-Quellcode:
gehts.
Excel.activesheet.Printout;
|
Re: Excel-ole richtig Freigeben
Hallo eragon123,
normalerweise sollte Excel wieder normal geschlossen werden. Allerdings weis ich nicht warum Du den Ausdruck in eine Schleife machst. Du solltest die Daten in eine Schleife übertragen und anschließend das Drucken des Worksheets durchführen. Beispiel:
Delphi-Quellcode:
Bis bald Chemiker
for i := 0 to High(daten) do
begin Excel.Cells[1,1].Value := daten[i]; // Excel.worksheets.Printout; end; Excel.worksheets.Printout; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz