AGB  ·  Datenschutz  ·  Impressum  







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

OLE Excel Handle

Ein Thema von Anonymos · begonnen am 21. Mai 2009 · letzter Beitrag vom 31. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
Anonymos
(Gast)

n/a Beiträge
 
#1

OLE Excel Handle

  Alt 21. Mai 2009, 14:38
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: OLE Excel Handle

  Alt 24. Mai 2009, 11:15
Hallo

Wie öffnest du Excel?
Thomas
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#3

Re: OLE Excel Handle

  Alt 24. Mai 2009, 15:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: OLE Excel Handle

  Alt 24. Mai 2009, 16:28
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;
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#5

Re: OLE Excel Handle

  Alt 24. Mai 2009, 16:51
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?
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: OLE Excel Handle

  Alt 24. Mai 2009, 16:59
Du bekommst die aller erste, die gestartet wurde und sich in der ROT registriert hat.
Wie man eine Liste bekommt, ist mir nicht bekannt.
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#7

Re: OLE Excel Handle

  Alt 24. Mai 2009, 17:11
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#8

Re: OLE Excel Handle

  Alt 24. Mai 2009, 17:21
Ab Excel 2002 kommst du an das Handle des Fensters mit

ExcelApplication.hwnd
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

Re: OLE Excel Handle

  Alt 24. Mai 2009, 17:27
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.
  Mit Zitat antworten Zitat
Anonymos
(Gast)

n/a Beiträge
 
#10

Re: OLE Excel Handle

  Alt 24. Mai 2009, 17:41
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
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.
  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 14:58 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