| |
|
|
Christof Neuß | Hallo, eigentlich eine einfache Frage. Aber ich kann's hier nicht nachstellen, da ich auf allen Rechnern Excel installiert habe.
Wenn ich eine Excel-Application "createn" will und es ist kein Excel auf dem Rechner, ist dann Excel&=0 ?
Kann ich anders testen, ob Excel vorhanden/erreichbar ist?
Merci, viele Grüße und ein schönes Wochenende... |
|
|
| |
|
|
|
| Da ich kein Excel installiert habe wäre es nun für mich ein Leichtes das zu testen -
leider bietest Du aber keine Exe an sodass ich jetzt nicht genau weiß was ich erst anstellen soll. ^^ |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hi Leute!
Das ging wohl an meine Adresse...
Wenn ich eine Excel-Application "createn" will und es ist kein Excel auf dem Rechner, ist dann Excel&=0 ?
Definitiv nein! Wenn eine ungültige ID angegeben wird, entsteht immer ein WebBrowser-Fenster: Damit verbunden ist dann eine Meldung über einen Verbindungs- oder Navigationsfehler.
Eine Möglichkeit, um zu klären, ob die gewünschte Anwendung vorhanden ist: KompilierenMarkierenSeparierenwindow 600,600
declare a#:dim a#,255
declare b#:dim b#,16
declare Error&
stringw a#,0 ="Irgendeine.Application"
Error&=external("ole32","CLSIDFromProgID",a#,b#)
print Error&,winerror$(Error&)
stringw a#,0 ="Excel.Application"
Error&=external("ole32","CLSIDFromProgID",a#,b#)
print Error&,winerror$(Error&)
stringw a#,0 ="InternetExplorer.Application"
Error&=external("ole32","CLSIDFromProgID",a#,b#)
print Error&,winerror$(Error&)
waitkey
Die Beschreibung dieser API bei MSDN ist etwas verwirrend: angeblich wird bei Nichtvorhandensein der App eine CLSID angelegt und in die Registry geschrieben. Das kann ich aber nicht bestätigen!
Eine andere Möglichkeit: Die Proc ocxName aus der ocxInfo.inc . Damit läßt sich nach ocxCreate() erfrage, was man da angelegt hat. Wenn's ein Browserfenster ist, könnte man darin dann gleich einen entsprechenden Hinweis für den Anwender erscheinen lassen.
HTH Pascal |
|
|
| |
|
|
|
Christof Neuß | Hallo Pascal,
das sieht gut aus
Nur noch eine Frage: Ich teste das am Anfang meines Programms. Wenn %Error<>0 kommt eine Fehlermeldung und Programm wird beendet. Ansonsten geht's halt weiter... An verschiedenen Stellen wird dann Excel geöffnet und auch wieder geschlossen. Dazu nutze ich ocxCreate(... Wie kann ich denn die Application wieder beenden, die ich mit Deiner Vorgehensweise geöffnet habe. Sonst stört die nachher und bleibt eben auch nach Ende des Programms offen.
Danke |
|
|
| |
|
|
|
Christof Neuß | Ich glaube, ich hab's hinbekommen. Über die oxcInfo3a.inc. Allerdings hat mir XPSE ein Fehler gemeldet. Die Funktion "WideToMulti..." wäre nicht deklariert. Habe diese dann aus der ocx2.inc in die ocx3a.inc kopiert. Dann ging's. Bei ExcelTEST&=oxcCreate("Excel.Applikation") zeigt mir oxcName(ExcelTEST&) jetzt "_Application" an.
Ob das richtig ist??? Mir ist eingefallen, dass ich Excel von meinem Netbook verbannt habe. Also dort getestet. Da kommt "IEWebBrowser2". Die Abfrage kann also m.E. auf
Instr("_APPLICATION",Upper$(osxName(ExcelTEST&)))=0 lauten. |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hi Christof!
Wie kann ich denn die Application wieder beenden, die ich mit Deiner Vorgehensweise geöffnet habe.
Am elegantesten mit ocxMethod(Excel&,"Quit")
_Application als Name eines Anwendungs-Objektes scheint zu stimmen. Oder eben auf IWebBrowser2 testen.
SeeYou Pascal |
|
|
| |
|
|
|
Christof Neuß | Hi Pascal,
das funktioniert
Ich mache das jetzt so: KompilierenMarkierenSeparieren Der Browser schließt sich dann aber nicht mit "Quit". Mit "Close" geht's auch nicht. Oder muss ich den gar nicht schließen?
Merci. |
|
|
| |
|
|
|
Uwe ''Pascal'' Niemeier | Hi Christof!
Da mußte ich selbst erstmal nachgucken
Kurzer Blick in den Taskmanager zeigt, das ein Webbrowser fest ans aufrufende Profan-Programm gekoppelt ist und sich damit auch beendet, wogegen eine Applikation selbständig (und möglicherweise im Hintergrund) weiterlaufen würde.
PS: Das trifft auch zu, wenn man dem zu erzeugenden Objekt ein Control zuweisen würde; eine Applikation hätte trotzdem ein eigenes Fenster, nur der WebBrowser würde im Hauptfenster sichtbar: KompilierenMarkierenSeparierenusermessages 16'--nur kontrolliert beenden per ENTER in %hwnd
ocxInit()
declare Control&
var ExcelTEST&=ocxCreate("Excelx.Application",%hwnd,10,10,300,300,$50000000,addr(Control&))
if InStr("BROWSER",Upper$(ocxName(ExcelTEST&)))
ocxMethod(ExcelTEST&,"Navigate","C:\Hinweis.html")
waitkey
else
ocxPut(ExcelTEST&,"Visible",1)
waitkey
ocxMethod(ExcelTEST&,"Quit")
endif
ocxRelease(ExcelTEST&)
destroywindow(Control&)
ocxDeInit()
HTH Pascal |
|
|
| |
|
|
|
Christof Neuß | Hi Pascal,
DANKE!!! |
|
|
| |
|
|