Absturz bei geöffneter xls-Datei verhindern

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Absturz bei geöffneter xls-Datei verhindern

Beitrag von peternmb »

Hallo,
in meinem Programm gibt es eine einfache Funktion, um den Inhalt einer DBF-Datei nach Excel zu exportieren.
Funktionierte problemlos, bis einer auf die Idee kam das 2x hintereinander zu machen, wobei beim 2.Aufruf die xls-Datei geöffnet ist.
Kann ich das irgendwie vorher prüfen bzw. verhindern?

Code: Alles auswählen

xls_datei:=XbpFileDialog():new():create():saveas(Hauptpfad+"\Export\Testdatei.xls")
if !empty(xls_datei)
   oExcel := CreateObject("Excel.Application")
   IF Empty( oExcel )
     MsgBox( "Um diese Funktion zu nutzen muss auf Ihrem Rechner Excel installiert sein!","Problem" )
     RETURN
   ENDIF
   //
   oExcel:DisplayAlerts := .F.
   oExcel:visible       := .F.
   oBook  := oExcel:workbooks:Open(Hauptpfad+"\Daten\MyDBF.dbf")
   //
   oBook:SaveAs( xls_datei , xlWorkbookNormal )
usw.
Funktioniert das auch mit OpenOffice problemlos? Hab ich leider nicht installiert um es zu testen.
Paul
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 43
Registriert: Mi, 21. Mär 2007 15:22
Wohnort: 1230 Wien

Re: Absturz bei geöffneter xls-Datei verhindern

Beitrag von Paul »

Hallo,

einfach mit einer Static-Var abfragen ob die func schon gestartet wurde:


Function xls_copy()
STATIC lxlscopy


if lxlscopy
Msgbox(" Funktion bereits aufgerufen")
Return .f.
endif

xls_datei:=XbpFileDialog():new():create():saveas(Hauptpfad+"\Export\Testdatei.xls")
if !empty(xls_datei)
oExcel := CreateObject("Excel.Application")
IF Empty( oExcel )
MsgBox( "Um diese Funktion zu nutzen muss auf Ihrem Rechner Excel installiert sein!","Problem" )
RETURN NIL
ENDIF
//

lxlscopy := .t.


oExcel:DisplayAlerts := .F.
oExcel:visible := .F.
oBook := oExcel:workbooks:Open(Hauptpfad+"\Daten\MyDBF.dbf")
//
oBook:SaveAs( xls_datei , xlWorkbookNormal )

usw.

lxlscopy := .f.

Return NIL
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16508
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Absturz bei geöffneter xls-Datei verhindern

Beitrag von Martin Altmann »

Moin Moin,
die Idee an sich ist gut!
Nur: Wenn das Programm die XLS-Datei erzeugt, während die alte Version (die vor 3 Wochen erzeugt wurde) in Excel geöffnet ist, stürzt es trotzdem ab.
Besser ist es sicherlich, mit dem Errorhandler zu arbeiten. Also einfach einen errorblock mit BEGIN SEQUENCE und END SEQUENCE drum herum programmieren. Wenn er dann wieder abstürzen würde, kannst Du darauf reagieren und entsprechend eine Meldung ausgeben.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Absturz bei geöffneter xls-Datei verhindern

Beitrag von peternmb »

Martin Altmann hat geschrieben: Besser ist es sicherlich, mit dem Errorhandler zu arbeiten. Also einfach einen errorblock mit BEGIN SEQUENCE und END SEQUENCE drum herum programmieren. Wenn er dann wieder abstürzen würde, kannst Du darauf reagieren und entsprechend eine Meldung ausgeben.
Martin
ja, das habe ich mir schon fast gedacht. Ich wollte mich nur vergewissern, dass es keine einfachere Möglichkeit gibt.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Absturz bei geöffneter xls-Datei verhindern

Beitrag von Tom »

Meines Erachtens müsste es eine Methode geben, um abzufragen, ob eine Datei geöffnet werden kann.

Ansonsten verfügt jedes AutomationObject über den Slot "OnError", über dem ihm ein Error-Codeblock zugewiesen werden kann. Das dürfte für diesen Fall eleganter sein als eine Sequenz.
Herzlich,
Tom
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Absturz bei geöffneter xls-Datei verhindern

Beitrag von Rolf Ramacher »

Hi Peter,

ich gehe mal davon aus, das dies ein sep. Programm erledigt. Wird dann nach dem Import dein Programm automatisch beendet?
oder bzw. nach dem beenden einen Wert in einer Datei bzw. Datenbank ablegen, daß ein Import bereits stattgefunden hat. und ein erneueter Import nicht möglich ist.

oder gibt es eine möglichkeit das beenden von Excel abzufragen ??
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Absturz bei geöffneter xls-Datei verhindern

Beitrag von peternmb »

Rolf Ramacher hat geschrieben:Hi Peter,

ich gehe mal davon aus, das dies ein sep. Programm erledigt ...
Nein, warum sollte ich das in ein seperates Programm auslagern, und was würde das ändern?

Das eigentliche Problem ist, unabhängig von meinem Programm der Absturz wenn die xls-Datei geöffnet ist (z.B. wie Martin schrub in Excel).
Tom hat geschrieben:Ansonsten verfügt jedes AutomationObject über den Slot "OnError", über dem ihm ein Error-Codeblock zugewiesen werden kann.
Ja, an sowas habe ich gedacht. Mal sehen ob ich dazu was finde.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Absturz bei geöffneter xls-Datei verhindern

Beitrag von AUGE_OHR »

hi,
peternmb hat geschrieben:

Code: Alles auswählen

   oExcel := CreateObject("Excel.Application")
   ...
   oBook  := oExcel:workbooks:Open(Hauptpfad+"\Daten\MyDBF.dbf")
   //
   oBook:SaveAs( xls_datei , xlWorkbookNormal )
Ich möchte dazu anmerken das die nicht der "normale" Weg sein sollte mit Excel auf eine DBF zuzugreifen ... :roll:

Lese die DBF Daten in ein Array ein und übergebe das Array an Excel.
gruss by OHR
Jimmy
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Absturz bei geöffneter xls-Datei verhindern

Beitrag von peternmb »

AUGE_OHR hat geschrieben:Ich möchte dazu anmerken das die nicht der "normale" Weg sein sollte mit Excel auf eine DBF zuzugreifen ... :roll:

Lese die DBF Daten in ein Array ein und übergebe das Array an Excel.
warum nochmal ein Array "zwischenschalten" :?: Sehe ich eigentlich keinen Sinn oder Vorteil drin :?

Das Absturzproblem habe ich jetzt mit einer errorsequenz gelöst, klappt wie gewünscht.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Absturz bei geöffneter xls-Datei verhindern

Beitrag von AUGE_OHR »

peternmb hat geschrieben:warum nochmal ein Array "zwischenschalten" :?: Sehe ich eigentlich keinen Sinn oder Vorteil drin :?
Es geht um den grundsätzlichen Zugriff von Excel "direkt" auf eine DBF.

Wenn ich einen User "erwische" der Excel nutzt um auf "meine" DBF zuzugreifen dann ... [-X
gruss by OHR
Jimmy
Antworten