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 OLE Excel Handle (https://www.delphipraxis.net/134404-ole-excel-handle.html)

Anonymos 21. Mai 2009 13:38


OLE Excel Handle
 
Hallo DP'ler

Ich stehe im Moment vor folgendem Problem:

Ich schreibe gerade an einer MDI-Anwendung.
Dabei möchte ich aus mehreren StringGrids Daten in eine Exceltabelle schreiben.
Diese Daten in Excel reinzuschreiben ist dank OLE kein Problem.
Leider öffnet OLE Excel "ganz normal".
Ich würde diese neu geöffnete Excel-Anwendung jedoch gerne wie ein MDI-Child in meiner Anwendung haben.
Dazu benötige ich jedoch das Handle von dem Excelfenster.

Ist es also möglich dieses Handle irgendwie via diesem OLE-Variant herauszubekommen?

Wenn ich des ganze über FindWindow mache habe ich leider das Problem, dass ich nicht eindeutig sicher sein kann, genau meine neue Excel-Anwendung zu haben (es könnte auch jede belibige andere offene sein).

mfg

toms 24. Mai 2009 10:15

Re: OLE Excel Handle
 
Hallo

Wie öffnest du Excel?

Anonymos 24. Mai 2009 14:56

Re: OLE Excel Handle
 
Hey,

Ich benutze nafür die Variable Variant in ComObj

Delphi-Quellcode:
ExcelApplication, ExcelWorksheet: Variant;

ExcelApplication := CreateOleObject('Excel.Application');
ExcelApplication.Visible := true;
ExcelApplication.Application.SheetsInNewWorkBook := 1;
ExcelApplication.Workbooks.Add;
ExcelWorlsheet := ExcelApplication.Sheets[1];
ExcelWorksheet.Select;
...
Das erstellt jedesmal eine neue ExcelApplication mit einem Worksheet.

Gibt es mehrere Möglichkeiten sowas zu öffnen?
Ich weiß zwar, dass es noch andere Schnittstellen gibt, damit kenn ich mich aber überhauptnicht aus.

sx2008 24. Mai 2009 15:28

Re: OLE Excel Handle
 
Du musst vorher schauen, ob Excel schon läuft.
Excel registriert sich selbst in der ROT (running object table) und das kann man mit GetActiveOleObject abfragen.
Delphi-Quellcode:
try
  // Versuche bestehende Excel-Anwendung aus der ROT zu holen
  ExcelApplication:=GetActiveOleObject('Excel.Application');
except
  // falls das fehlschlägt eine neue Excel-Anwendung starten
  ExcelApplication:=  CreateOleObject('Excel.Application');
end;

Anonymos 24. Mai 2009 15:51

Re: OLE Excel Handle
 
Was würde denn dabei passieren, wenn es schon mehrere Excelanwendungen gibt?
bekomm ich dann irgendene, oder kann ich mir die vllt alle der Reihe nach auflisten lassen?

sx2008 24. Mai 2009 15:59

Re: OLE Excel Handle
 
Du bekommst die aller erste, die gestartet wurde und sich in der ROT registriert hat.
Wie man eine Liste bekommt, ist mir nicht bekannt.

Anonymos 24. Mai 2009 16:11

Re: OLE Excel Handle
 
Aber an das Handle dieser Anwendung komm ich immernoch nich?

Ich mein ich könnt natürlich dem Fenstertitel einen total Exotischen Namen geben, un diesen dann über Findwindows suchen, aber ...
Das ist irgendwie keine Schöne Lösung

mfg

toms 24. Mai 2009 16:21

Re: OLE Excel Handle
 
Ab Excel 2002 kommst du an das Handle des Fensters mit

Delphi-Quellcode:
ExcelApplication.hwnd

sx2008 24. Mai 2009 16:27

Re: OLE Excel Handle
 
Zitat:

Zitat von Anonymos
Aber an das Handle dieser Anwendung komm ich immernoch nich?

Wozu? Du brauchst es nicht.
Du öffnet die Excel-Anwendung nur einmal und erzeugst dann soviele Workbooks, wie du Stringgrids in deiner Anwendung hast.
Ein Workbook entspricht einer Exceldatei.
Du kannst auch ein Workbook mit mehreren Worksheets (Arbeitsblätter) erzeugen; dann hast du alle Daten in einer Exceldatei.

Anonymos 24. Mai 2009 16:41

Re: OLE Excel Handle
 
Nein, nein, das ist ja garnich mein Problem,
in meinem Code öffne ich ja genau nur 1 Workbook mit einem Worksheet.

Sondern,
Ich würde das ganze gerne als MDI-Child in meine Anwendung einbinden,
also sozusagen vom Desktop klauen und als Parent meine MDI-Form angeben.
Sodass das ganze dann in meiner Anwendung gefangen ist.

Das kann ich über SetWindowPlacement machen,
dann geb ich dabei das Handle des Parents und das des anderen Fensters an.
Das hat bisher auch so priema geklappt, bis auf den SpeichernDialog, der nicht mehr angezeigt wurde.


Das Handle kann ich also einfach mit Excel.hwnd herausbekommen?

Gott, is das primitiv :-D
An sowas denkt man doch nicht :-(

thx

Aber habt ihr vllt eine Ahnung, warum das mit dem Dialogfenster nicht funzt?
Das erscheint einfach nirgendwo mehr, weder auf dem Desktop, noch in meiner Anwendung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 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