Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   delphi --stream--> excel ?? (https://www.delphipraxis.net/127008-delphi-stream-excel.html)

Chemiker 9. Jan 2009 00:29

Re: delphi --stream--> excel ??
 
Hallo hyype,

Zitat:

Zitat von hyype
Mir geht es ja eigentlich nur darum, die Datei anzuzeigen.
Deswegen habe ich auch das Excel-Fenster abgescreent und Excel wieder geschlossen, aber dann habe ich in den meisten Fällen gar nicht alle in der Excel-Tabelle vorhandenen Informationen, weil die Tabellen ja riesig sein können.
Daher öffne ich die Datei einfach in Excel.
Dazu prüfe ich, ob Excel evtl schon offen ist. Wenn das der Fall ist, kann ich ja davon ausgehen, dass auch Workbooks geöffnet sind und speziell kann es sein, dass ein anderes Workbook über mein Programm geöffnet wurde und daher die hype.xls blockiert ist.
D.h. wenn Excel schon offen ist, muss ich zunächst das evtl vorher über mein Programm geöffnete Workbook schließen, damit die hype.xls wieder zur Verfügung steht und ich den Stream wieder als hype.xls speichern kann, ich darf aber nicht Excel komplett schließen, weil ja evtl auch ein ganz anderes Workbook geöffnet sein kann, womit mein Programm gar nix zu tun hat.

Das habe ich nicht verstanden?

Du kannst Excel doch einfach öffnen und dann wird eine 2 Instanz von Excel erstellt, die unabhängig von der Excel-Instanz ist die mit Deinem Programm geöffnet worden ist.
Zudem könnte man abprüfen ob das Workbook „hype.xls“ noch in Excel vorhanden ist.

Zitat:

Zitat von hyype
Könntest du bitte noch was zum Thema "Stream an Excel übergeben und öffnen" sagen?

Vielleicht könnte ich, wenn wüsste was Du darunter verstehst.

Also, im Stream sind Daten, wie sehen diese Daten aus? Woher kommen diese Daten? Von einer Datenbank aus einem StringGrid? Oder ist es eine Text-Datei?
Oder, willst Du nur eine XLS-Datei kopieren und dann wieder in Excel aufrufen?

Das sind so einige Möglichkeiten, es gibt sicher noch mehr.


Bis bald Chemiker

WS1976 9. Jan 2009 06:11

Re: delphi --stream--> excel ??
 
Hallo Chemiker,

was prüfst du damit: (Testest du damit ob Excel (als Variable) noch existiert?)
Delphi-Quellcode:
   If VarIsEmpty(Excel)
steh etwas auf der Leitung. Kann dafür keine Hilfe finden.

Grüsse
Rainer

Chemiker 9. Jan 2009 07:04

Re: delphi --stream--> excel ??
 
Hallo,

ob die Variabel existiert wird nicht geprüft, sonder ob sie ihr Unassigned zugewiesen worden ist.

Das bedeutet das Programm hat keine Verbindung mehr zu Excel.

Das Beispiel ist zugegebener maßen konstruiert, aber mir viel auf die Schnelle nichts Besseres ein.

Einmal mit Abfrage:

Delphi-Quellcode:
Excel.DisplayAlerts := False;
Excel.Quit;
Excel := Unassigned;
if not VarIsEmpty(Excel) then
  begin
    Excel.DisplayAlerts := False;
    Excel.Quit;
    Excel := Unassigned;
  end;
Einmal ohne Abfrage:

Delphi-Quellcode:
Excel.DisplayAlerts := False;
Excel.Quit;
Excel := Unassigned;

Excel.DisplayAlerts := False;
Excel.Quit;
Excel := Unassigned;
Mit der Abfrage läuft das Programm ohne Fehlermeldung durch.

Bis bald Chemiker

hyype 9. Jan 2009 10:38

Re: delphi --stream--> excel ??
 
Hallo Chemiker!
Zitat:

Zitat von Chemiker
Oder, willst Du nur eine XLS-Datei kopieren und dann wieder in Excel aufrufen?

Im Endeffekt will ich das machen.
Ich mache ms.loadfromfile('D:\beispiel.xls') und dann ist in dem Stream eine exakte Kopie einer Excel-Datei.
Den will ich dann an Excel übergeben.
Noch eine Frage:
Wenn ich, wie du gesagt hast, eine neue Instanz von Excel öffne, um meine Datei anzuzeigen, kriegt Delphi dann irgendwie mit, wenn ich das Excel schließe?
Weil nur dann bringt mir das was.
Lata

edit:
Noch ein Problem...:
Wenn der User in eine Zelle geht und irgendwas eingibt ohne Enter zu drücken und dann wieder zu meinem Programm switcht und sich die nächste Excel-Datei anzeigen will, kann ich das alte Workbook nicht schließen.
Wenn der Cursor in einer Zelle steht, ist Excel lahmgelegt...
Was kann ich da machen? ^^

Chemiker 12. Jan 2009 18:25

Re: delphi --stream--> excel ??
 
Hallo hyype,

Zitat:

Zitat von hyype
Im Endeffekt will ich das machen.
Ich mache ms.loadfromfile('D:\beispiel.xls') und dann ist in dem Stream eine exakte Kopie einer Excel-Datei.
Den will ich dann an Excel übergeben.

Warum wird nicht direkt die XLS-Datei in Excel geladen? Für mich mach es nur Sinn, eine Datei in Delphi zu laden die Daten zu manipulieren und dann nach Excel für die weitere Verarbeitung zu laden. Eine Kopie kann man doch auch Betriebssystem-Ebene von der Datei anfertigen.

Zitat:

Zitat von hyype
Noch eine Frage:
Wenn ich, wie du gesagt hast, eine neue Instanz von Excel öffne, um meine Datei anzuzeigen, kriegt Delphi dann irgendwie mit, wenn ich das Excel schließe?
Weil nur dann bringt mir das was.

Dann würde ich aber die frühe Bindung einsetzen, weil dann Dir die Komponenten von Delphi zur Verfügung stehen. Unter Ereignisse kann man dann auf das schließen des Workbook z.B. reagieren, oder sogar unterbinden.

Zitat:

Zitat von hyype
Wenn der User in eine Zelle geht und irgendwas eingibt ohne Enter zu drücken und dann wieder zu meinem Programm switcht und sich die nächste Excel-Datei anzeigen will, kann ich das alte Workbook nicht schließen.

Das ist aber kein ungewöhnliches Verhalten von Excel. Du kannst ja mal Excel normal aufrufen (nicht durch Dein Programm) so wirst Du feststellen, wenn Du die Zelleneingabe nicht durch TAB oder Return (usw.) abschließt das Du das Workbook nicht schließen kannst.

Bis bald Chemiker

hyype 22. Jan 2009 13:05

Re: delphi --stream--> excel ??
 
Hi Chemiker!

Zitat:

Zitat von Chemiker
Das ist aber kein ungewöhnliches Verhalten von Excel. Du kannst ja mal Excel normal aufrufen (nicht durch Dein Programm) so wirst Du feststellen, wenn Du die Zelleneingabe nicht durch TAB oder Return (usw.) abschließt das Du das Workbook nicht schließen kannst.

Ja, das habe ich getestet und eben drum versucht, diesen Fall zu behandeln.
Aber egal, ich habe es jetzt aufgegeben, ich speichere die Datei einfach ab und shellexecute sie.. unschön, aber unkompliziert.

Vielen Dank für deine Mithilfe.

MfG

hyype


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:51 Uhr.
Seite 2 von 2     12   

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