Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriff auf MS Excel (https://www.delphipraxis.net/123829-zugriff-auf-ms-excel.html)

ThoPos 9. Nov 2008 21:01


Zugriff auf MS Excel
 
Hallo Zusammen,

ich stehe vor folgendem Problem:

Ich starte von Excel heraus mein Delphi-Programm und übergebe als Parameter den Namen der Excel-Arbeitsmappe und der Excel-Tabelle.
In meinem Programm greife ich dann mit GetActiveOLEObject('Excel.Application') auf Excel zu und lese die Tabelle aus. Dies funktioniert gut - solange nur eine Instanz von Excel läuft.

Aber wie kann mit ich die korrekte Instanz von Excel identifizieren und als Object einbinden?

Gruß aus Köln
Thomas

DeddyH 9. Nov 2008 21:05

Re: Zugriff auf MS Excel
 
Wie startest Du Excel denn? Per ShellExecute? Das gibt Dir doch IIRC das Instanzen-Handle zurück (oder eben einen Fehlercode).

mkinzler 9. Nov 2008 21:30

Re: Zugriff auf MS Excel
 
Du könntest die Datei auch per COM/OLe laden lassen

ThoPos 10. Nov 2008 03:45

Re: Zugriff auf MS Excel
 
Hallo Zusammen,

leider verstehe ich Eure Antworten nicht. :?:

Wie geschrieben läuft Excel schon und die Arbeitsmappe ist auch schon geladen. Ich starte von Excel heraus mit 'Shell "MeinProg.exe" "Mappe.xls" "Tabelle1", vbnormal' mein Delphi-Programm.

@DeddyH
Welche Rolle spielt es also, wie Excel vom Desktop oder Startmenü aus gestartet wurde?

@mkinzler
Wie soll ich die bereits geöffnete Datei mit COM/Ole laden?

Gruß aus Köln
Thomas

Chemiker 10. Nov 2008 07:02

Re: Zugriff auf MS Excel
 
Hallo ThoPos,

am besten wird es sein, wenn Du Dir eine neue Excel-Instanz erstellst.

Mit:

Delphi-Quellcode:
Excel:= CreateOleObject('Excel.Application’);
Und anschließend Deine XLS-Datei in Excel öffnen.


Bis bald Chemiker

teebee 10. Nov 2008 08:18

Re: Zugriff auf MS Excel
 
Es gibt bei MS einen Artikel, der anscheinend beschreibt, was Du brauchst:
Zitat:

Another way to get the IDispatch is by using the GetActiveObject() API to get the server's IDispatch from the ROT. However, this method requires that you must be able to obtain the CLSID or ProgID of the server. Furthermore, ambiguous situations can occur where you can't distinguish between multiple instances of the server.

This article uses another approach to obtain the IDispatch, which works for both Microsoft Excel and Microsoft Word, even when multiple instances are running.

ThoPos 3. Feb 2009 13:18

Re: Zugriff auf MS Excel
 
Hallo teebee,

das scheint das zu sein, was ich brauche. Auch wenn ich auf Grund anderer Probleme erst jetzt wieder dazu komme, mich diesem Problem anzunehmen.

Nur: kann mir das bitte jemand nach Delphi 2007 übersetzen?

Danke im Voraus!
Thomas

Chemiker 3. Feb 2009 13:43

Re: Zugriff auf MS Excel
 
Hallo ThoPos,

Zitat:

Zitat von ThoPos
Wie geschrieben läuft Excel schon und die Arbeitsmappe ist auch schon geladen. Ich starte von Excel heraus mit 'Shell "MeinProg.exe" "Mappe.xls" "Tabelle1", vbnormal' mein Delphi-Programm.

Warum startest Du Excel nicht mit Deinem Programm? Irgendwie werde ich da nicht schlau raus.

Du hast Excel mit einer Tabelle, dann startest Du Dein Programm aus Excel und willst dann wieder Bezug auf die Tabelle nehmen die in Excel steht aus dem Du Dein Programm startest.

Ist es nicht viel einfacher von Deinem Programm Excel zu starten?


Bis bald Chemiker

Sherlock 3. Feb 2009 13:56

Re: Zugriff auf MS Excel
 
Zitat:

Zitat von Chemiker
Du hast Excel mit einer Tabelle, dann startest Du Dein Programm aus Excel und willst dann wieder Bezug auf die Tabelle nehmen die in Excel steht aus dem Du Dein Programm startest.

Ist es nicht viel einfacher von Deinem Programm Excel zu starten?

Der geschilderte Zusammenhang legt eigentlich nahe ein Excel-Addin zu schreiben.
http://www.delphipraxis.net/internal...ht=excel+addin

Sherlock

ThoPos 3. Feb 2009 20:28

Re: Zugriff auf MS Excel
 
Hallo Zusammen,

ich versuche mal mein Problem näher zu beschreiben.

Von einem analytischen Meßgerät werden physikalische und chemische Daten gemessen. Die gemessenen Daten werden anschließend vom Analysengerät automatisch, zur weiteren Verrechnung, nach Excel geschrieben. Anschließend werden diese Daten vom Anwender mittels eines von mir erstellten AddIns aufbereitet und die endgültige Ergebnisse ermittelt.

Diese Ergebnisse sollen danach zum einen in eine Oracle-Datenbank geschrieben und zum anderen an den Auftraggeber übermittelt werden. Aus dem AddIn heraus sind diese beiden Schritte nicht praktikabel, weil
- die Datenbankanbindung mit ODAC einfacher, besser und schneller ist als ODBC bzw. ADO.
- mit Delphi FTP, SMTP und ähnliches unkomplizierter ist.

Aus diesem Grund starte ich, nach dem das Excel-AddIn mit seinen Aufgaben fertig ist, mein Delphi-Programm, welches die Tabelle ausliest und die Daten in eine Oracle-Datenbank schreibt. Anschließend erfolgt die Übermittelung der Daten an den Auftraggeber nach Kundenwunsch (FTP, Mail, Fax, Andruck, etc.).

Das ganze funktioniert einwandfrei - solange nur eine Instanz von Excel läuft. Wenn aber das Analysengerät eine neue Excel-Datei anlegt, während mein AddIn gerade eine Auswertung durchführt, so sind beim anchließend Start des Delphi-Programmes zwei Instanzen von Excel geöffnet. Und schon liefert das GetOLEObject, genauer gesagt der anschließende Zugriff auf die Arbeitsmappe, in fast allen Fällen eine Exception.

Ich hoffe, daß jetzt mein Problem verständlicher ist.

Gruß
Thomas


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.
Seite 1 von 4  1 23     Letzte »    

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