Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Excel-ole richtig Freigeben (https://www.delphipraxis.net/148696-excel-ole-richtig-freigeben.html)

eragon123 6. Mär 2010 15:44


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;

fishly 6. Mär 2010 17:30

Re: Excel-ole richtig Freigeben
 
Versuch mal das hier:

Delphi-Quellcode:
.PrintOut(Background := false);
Damit lässt du den Druckdialog anzeigen und Excel kann geschlossen werden.
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

eragon123 6. Mär 2010 18:57

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.

blauweiss 6. Mär 2010 19:04

Re: Excel-ole richtig Freigeben
 
Warum machst du am Ende nicht einfach

Delphi-Quellcode:
Excel.Free;
?

Grüße,
blauweiss

Sir Rufo 6. Mär 2010 19:11

Re: Excel-ole richtig Freigeben
 
Zitat:

Zitat von blauweiss
Warum machst du am Ende nicht einfach

Delphi-Quellcode:
Excel.Free;
?

Grüße,
blauweiss

Weil das nix bringt ... hier wird ja keine Instanz erzeugt wie bei TObject, sondern eine OLE-Verbindung hergestellt.
Das einzige was man damit free-en könnte wäre die Verbindung.

fishly 6. Mär 2010 19:36

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:
WordApp.ActiveDocument.PrintOut(Background := false, Append := false, Range := wdPrintAllPages);
lg fishly

eragon123 6. Mär 2010 21:29

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 !

fishly 7. Mär 2010 00:18

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

eragon123 7. Mär 2010 10:25

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:
Excel.activesheet.Printout;
gehts.

Chemiker 7. Mär 2010 10:39

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:
for i := 0 to High(daten) do
  begin
    Excel.Cells[1,1].Value := daten[i];
 //   Excel.worksheets.Printout;
  end;
Excel.worksheets.Printout;
Bis bald Chemiker


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz