AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Excel-ole richtig Freigeben

Ein Thema von eragon123 · begonnen am 6. Mär 2010 · letzter Beitrag vom 7. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
eragon123

Registriert seit: 6. Mär 2010
53 Beiträge
 
#1

Excel-ole richtig Freigeben

  Alt 6. Mär 2010, 16:44
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;
  Mit Zitat antworten Zitat
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#2

Re: Excel-ole richtig Freigeben

  Alt 6. Mär 2010, 18:30
Versuch mal das hier:

.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
never change a running system...
  Mit Zitat antworten Zitat
eragon123

Registriert seit: 6. Mär 2010
53 Beiträge
 
#3

Re: Excel-ole richtig Freigeben

  Alt 6. Mär 2010, 19:57
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.
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#4

Re: Excel-ole richtig Freigeben

  Alt 6. Mär 2010, 20:04
Warum machst du am Ende nicht einfach

Excel.Free; ?

Grüße,
blauweiss
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: Excel-ole richtig Freigeben

  Alt 6. Mär 2010, 20:11
Zitat von blauweiss:
Warum machst du am Ende nicht einfach

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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#6

Re: Excel-ole richtig Freigeben

  Alt 6. Mär 2010, 20:36
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

WordApp.ActiveDocument.PrintOut(Background := false, Append := false, Range := wdPrintAllPages); lg fishly
never change a running system...
  Mit Zitat antworten Zitat
eragon123

Registriert seit: 6. Mär 2010
53 Beiträge
 
#7

Re: Excel-ole richtig Freigeben

  Alt 6. Mär 2010, 22:29
Ä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 !
  Mit Zitat antworten Zitat
fishly

Registriert seit: 30. Okt 2008
31 Beiträge
 
Delphi 5 Standard
 
#8

Re: Excel-ole richtig Freigeben

  Alt 7. Mär 2010, 01:18
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
never change a running system...
  Mit Zitat antworten Zitat
eragon123

Registriert seit: 6. Mär 2010
53 Beiträge
 
#9

Re: Excel-ole richtig Freigeben

  Alt 7. Mär 2010, 11:25
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

Excel.activesheet.Printout; gehts.
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Excel-ole richtig Freigeben

  Alt 7. Mär 2010, 11:39
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
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr.
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