![]() |
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 |
Re: OLE Excel Handle
Hallo
Wie öffnest du Excel? |
Re: OLE Excel Handle
Hey,
Ich benutze nafür die Variable Variant in ComObj
Delphi-Quellcode:
Das erstellt jedesmal eine neue ExcelApplication mit einem Worksheet.
ExcelApplication, ExcelWorksheet: Variant;
ExcelApplication := CreateOleObject('Excel.Application'); ExcelApplication.Visible := true; ExcelApplication.Application.SheetsInNewWorkBook := 1; ExcelApplication.Workbooks.Add; ExcelWorlsheet := ExcelApplication.Sheets[1]; ExcelWorksheet.Select; ... Gibt es mehrere Möglichkeiten sowas zu öffnen? Ich weiß zwar, dass es noch andere Schnittstellen gibt, damit kenn ich mich aber überhauptnicht aus. |
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; |
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? |
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. |
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 |
Re: OLE Excel Handle
Ab Excel 2002 kommst du an das Handle des Fensters mit
Delphi-Quellcode:
ExcelApplication.hwnd
|
Re: OLE Excel Handle
Zitat:
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. |
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 22:13 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