Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Antworten
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Beitrag von georg »

Hallo,


ich habe da einen sehr seltsamen Effekt:

Code: Alles auswählen

	nCurRow := 2
	lDoShift := .F.
	xValue := oSheet:Cells(nCurRow, 1):Value
	WHILE xValue <> NIL .AND. nCurRow <= nMaxRows
			oProgressDia:NewLine("Zeile " + LTrim(Str(nCurRow)) + " von " + LTrim(Str(nMaxRows)))
		WriteLineIntegra(oSheet, nCurRow, lDoShift)
		nCurRow ++
		xValue := oSheet:Cells(nCurRow, 1):value
	END
oProgressDia ist eine Klasse, mit der ich Fortschrittsinformationen in einer XbpListbox() ausgeben kann.

Lasse ich das Programm im Debugger laufen, wird die Datei komplett gelesen und verarbeitet.

Lasse ich das Programm ohne Debugger laufen, hängt das Programm bei der 28. Zeilen und reagiert nicht mehr.

Die Excel-Datei wird durch einen Export aus einem DWH erzeugt und lässt sich in MS Office 2010 ohne Probleme oder Fehlerhinweise laden.

Nun brauche ich eine gute Idee ...
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Beitrag von AUGE_OHR »

ich hatte auch mal die Situation das es nur mit Debugger lief
https://xbaseforum.de/viewtopic.php?f=32&t=8612&p=97058

Frage : Xbase++ v1.9x oder v2.x ?

liest du die Excel Datei via ActiveX ?

p.s. eine XbpListbox() würde ich auf o:hide() schalten wenn ich mehr o:AddItem() habe als ich anzeigen kann (ohne Scrollbar).
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Beitrag von georg »

Hallo, Jimmy -


also, Xbase++ 2.0 (Version 886). Die Excel-Datei wird via Office-Automation geöffnet, also CreateObject("Excel.Application").

Im Gegensatz zu Deinem damaligen Problem lässt sich das Programm starten und bedienen. Nur beim Einlesen der Daten aus der Excel-Datei hängt es sich ohne Debugger auf.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2120
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 29 Mal
Danksagung erhalten: 70 Mal

Re: Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Beitrag von Werner_Bayern »

Hört sich nach einem notwendigen sleep(1) an, wenns nicht ursächlich an dieser Excel-Datei liegt?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Beitrag von AUGE_OHR »

was ist wenn du den Progressbar weg lässt :?:

überhaupt was für ein Progressbar ist es :?:
wenn es der "grüne" Progressbar von Alaska oder DXE_Progressbar sein sollten : die laufen in einen eigenen GUI Thread :!:

---

Frage : warum nimmt du eine Schleife um das Excel Sheet zu "lesen" :?:

wenn du den Berech (Range) markierst (SELECT) kannst du doch alles in ein Array schaufeln mit

Code: Alles auswählen

   aExcel := oSheet:range( "A1:"+cEnde+LTRIM(STR(numRows)) ):value
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Beitrag von georg »

Guten Morgen -


die Reaktionen auf solche Fragen sind immer wieder interessant. So habe ich geschrieben, dass die Fortschrittsanzeige eine XbpListBox() ist (also kein XbpprogressBar()). Die im Code gezeigte Information habe ich eingefügt, um festzustellen, an welcher Stelle es hakt, die war vorher dort nicht drin, aber der Hänger kam trotzdem.

Die Funktion WriteLineIntegra() übernimmt die Daten aus einer Zeile, ändert aber auch (abhängig von bestimmten Faktoren) Werte in der Excel-Datei. Dabei scheint es - sporadisch und an verschiedenen Stellen - zu dem Hänger zu kommen. (Hintergrund: ich habe einen Daten-Import aus einer Text-Datei auf Excel umgestellt).

Hier erscheint mir Jimmy's Vorschlag hilfreich, es mit einer Range zu versuchen und dann mit dem Array zu arbeiten (das Ändern in der Excel-Datei ist eigentlich nicht erforderlich, es müssen nur die importierten Daten angepasst werden).

Also danke erst einmal für das Feedback und die Hinweise. Ich werde weiter berichten.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16488
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Beitrag von Martin Altmann »

Nun,
im Allgemeinen kann man (wie von Werner angemerkt) davon ausgehen, dass der Garbage Collector etwas Zeit braucht - sofern etwas mit aktivem Debugger funktioniert, ohne aber nicht.
In diesem speziellen Fall wirst Du mit Jimmys Vorschlag sicherlich besser dran sein, weil schneller (kein Bremsen des Ablaufs).

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.
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Beitrag von Wolfgang Ciriack »

wenn du den Berech (Range) markierst (SELECT) kannst du doch alles in ein Array schaufeln mit
Markieren ist doch gar nicht notwendig, wenn man

Code: Alles auswählen

      oWorkBook := oExcel:workbooks:open(meineexecdatei)
      aValues := oWorkBook:workSheets(1):usedRange:value
      oWorkBook:close(.F.)
nimmt, hat man alle Werte in einem Array.
Viele Grüße
Wolfgang
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Excel-Datei einlesen - mit Debugger geht, ohne hängt das Programm

Beitrag von AUGE_OHR »

Wolfgang Ciriack hat geschrieben: Di, 27. Feb 2018 8:12 Markieren ist doch gar nicht notwendig, wenn man

Code: Alles auswählen

      aValues := oWorkBook:workSheets(1):usedRange:value
nimmt, hat man alle Werte in einem Array.
hm ... :-k
aus irgend einem Grund lege ich das Array vorher in den Dimensionen an. dabei funktionierte

Code: Alles auswählen

      // nmber Row / Col
         numRows    := oWorkBook:workSheets(1):usedRange:Rows:Count
         numColumns := oWorkBook:workSheets(1):usedRange:Columns:Count
nicht wenn ich nicht vorher ein

Code: Alles auswählen

     // SELECT hole Range
        oWorkBook:workSheets(1):usedRange:Select
stehen hatte.

ich werde die paar Zeilen einfach mal auskommentieren und sehen ob es mit meiner (alten) Excel Version ohne die Zeilen läuft.
Danke für den Tip
gruss by OHR
Jimmy
Antworten