Seite 1 von 1

Hilfe!!! Export nach Excel

Verfasst: Do, 06. Sep 2007 15:13
von Gerd König
Hallo Ihr Excel- und XBase-Experten,

ich habe ein Problem beim Export von Browserdaten mittels Array in eine Exceltabelle.

Ich arbeite mit JazzAge, habe ein Excelsheet erzeugt. Dann schreibe ich den Tabellenkopf (Fettschrift) und anschließend die Daten aus dem Array. Dabei handelt es sich um Zeichenketten und um numerische Werte.

Die Zeichenketten kann ich ohne Probleme eintragen.
Numerische Werte funktionieren auch, wenn es sich um Integerwerte handelt.

Dezimalstellen werden aber nicht erkannt und abgeschnitten. So wird aus
79.000 ...... 79
28.600 ...... 28
0.000 ...... 0
Manchmal steht wenn ich 0.000 eintrage aber auch -2E+09 in der Zelle
Ich habe versucht, diese Zellen zu formatieren, aber ohne Erfolg

In die Zellen schreibe ich wie folgt:

Code: Alles auswählen

<oApplication:ActiveSheet:Cells[{i+1,"ColumnIndex",j}]:Value:=aData[i,j]>

Kann mir jemand helfen?

Herzlichst
Gerd

Verfasst: Do, 06. Sep 2007 15:37
von Tom
Hallo, Gerd.

Übergib mal die numerischen Werte mit Str() und ansonsten exakt wie Zeichenketten.

Verfasst: Do, 06. Sep 2007 15:38
von Lewi
Hallo Gerd,
hilft evtl. eine Transformierung des Dezmalstrenners von "." nach "," weiter?

Gruß, Olaf

Verfasst: Do, 06. Sep 2007 15:43
von Tom
@Lewi: Natürlich. Ein deutsches Excel erkennt den Punkt nicht als Dezimalzeichen. Also StrTran(STr(nWert,12,2),".",",") oder ähnliches.

Verfasst: Do, 06. Sep 2007 19:12
von Alfred
Hallo Gerd,

bei mir ergibt

Code: Alles auswählen

nbetrag := 1000.12
oSheet1:cells(1,2):Value := nbetrag
1000,12
28.600 wird zu 28,6

Nimm mal mein Beispiel aus "Daten aus Excel auslesen" hier im Forum
und setzte die beiden Zeilen noch ein.

Ich vermute dein Excelblatt in das Du schreibst ist vorformatiert.

Welches Excel verwendest Du denn? Ich verwende Excel 2002.

Gruß
Alfred

Verfasst: Do, 06. Sep 2007 21:33
von Gerd König
Hi,
vielen Dank für die Antworten,
die Übergabe der Daten als String habe ich auch schon probiert:

Übergebe ich eine Zahl, bei der die Dezimalstellen nicht 0 sind, z.B. "25,545" wird dieser Wert korrekt in die Zelle eingetragen und das Format dieser Zelle auch als "Zahl" definiert.

Schreibe ich jedoch "0,000" in diese Zelle, wird dieser String linksbündig als Text eingetragen (mit einem kleinen grünen Dreieck in der linken oberen Ecke).

Da das entstandene Excelsheet eventuell weiterbearbeitet wird, sollten alle Einträge in der betreffenden Spalte auch als Zahl formatiert sein.

Gruß Gerd :?

Re: Hilfe!!! Export nach Excel

Verfasst: Do, 06. Sep 2007 21:45
von AUGE_OHR
hi,
Gerd König hat geschrieben: Ich habe versucht, diese Zellen zu formatieren, aber ohne Erfolg
In die Zellen schreibe ich wie folgt:

Code: Alles auswählen

<oApplication:ActiveSheet:Cells[{i+1,"ColumnIndex",j}]:Value:=aData
[i,j]>
versuche mal eine andere formatierung der Column:

Code: Alles auswählen

// Set number format in cells x6 to x6+nTreff
* oSheet:range("A6:A"+LTRIM(STR(6+nTreff ))):NumberFormat := "Standart"
oSheet:range( "B6:B" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "#0,00"
oSheet:range( "C6:C" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "TT.MM.JJ"
oSheet:range( "D6:D" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "#0,00"
oSheet:range( "E6:E" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "#0,00"
oSheet:range( "F6:F" + LTRIM( STR( 6 + nTreff ) ) ) :NumberFormat := "TT.MM.JJ"

DO WHILE ( UMSATZ->UKDNR = cKDNR ) .AND. .NOT. EOF()
   IF EVAL( myBlock ) .AND. !DELETED()
       nStart ++
       oWait:cargo:setcaption( LTRIM( STR( nStart - 5 ) ) + "/" + LTRIM( STR( nTreff ) ) )
       oSheet:item( nStart, 1 ) :Value := UMSATZ->URECHNR
       oSheet:item( nStart, 2 ) :Value := UMSATZ->UMSATZGES
       oSheet:item( nStart, 3 ) :Value := SUBSTR( UMSATZ->URECHDAT, 1, 2 ) + "." + ;
                  SUBSTR( UMSATZ->URECHDAT, 3, 2 ) + "." + ;
                  SUBSTR( UMSATZ->URECHDAT, 5, 2 )
       oSheet:item( nStart, 4 ) :Value := UMSATZ->UBEZAHLT
       oSheet:item( nStart, 5 ) :Value := UMSATZ->USTAND
       oSheet:item( nStart, 6 ) :Value := DTOC( UMSATZ->UBEZADAT )
       * oSheet:item(nStart,7):Value  :=  UMSATZ->MA
       * oSheet:item(nStart,8):Value  :=  UMSATZ->TZ 
       * oSheet:item(nStart,9):Value  :=  UMSATZ->OK
       IF UMSATZ->UMSATZGES < 0.00
           oSheet:item( nStart, 2 ) :interior:colorindex := 8
       ENDIF
   ENDIF
   SKIP
ENDDO
gruss by OHR
Jimmy

Verfasst: Do, 06. Sep 2007 22:37
von Alfred
Hallo Gerd,

hast Du den von deinem Programm erzeugten Wert mal mit VALTYPE()
geprüft?

Bei mir funktioniert nbetrag3 := 0.00 einwandfrei.

Gruß
Alfred

Verfasst: Do, 06. Sep 2007 22:44
von Alfred
Hallo Gerd,

was mir noch einfällt, könnte es sein, dass deine Mappe1.xls ein Problem hat?
Füge doch mal eine neue Seite ein und kontrolliere die Formatierung. Bei mir ist diese default auf Standard gesetzt.

Gruß
Alfred

Verfasst: Fr, 07. Sep 2007 7:24
von Gerd König
Hallo Jimmy und Alfred,

wenn ich die Zahl als String mit Punkt als Dezimaltrennung angebe, macht Excel (deutsche Version 2002) prinzipiell keinen Fehler, aber Dezimalstellen mit 0 werden abgeschnitten.

"287.833" wird zu 287,833
"0.667" wird zu 0,667
"9.600" wird zu 9,6
"0.000" wird zu 0 (Alles numerisch)

Die Zellenformatierung bleibt trotz aller Versuche auf Standard stehen.

Ich habe auch Spalten dabei, die durch die Standardeinstellung Zeichenketten, die nur aus Ziffern bestehen, als numerischen Wert eintragen. Diese Zellen würde ich als Text formatieren.

Wenn die Formatierung funktioniert, müßte alles korrekt angezeigt werden

Wie teile ich der Zelle den Formattyp mit (Zahl oder Text)? Das ist das Problem was noch besteht!

Gruß Gerd

Verfasst: Fr, 07. Sep 2007 8:18
von Alfred
Hallo Gerd,

das Verhalten von Excel ist kein Fehler, sondern absolut normal, weil eben
per default als Format Standard eingestellt ist.

Griff in die Trickkiste: eine leere Excel-Datei mit richtig formatierten Spalten
verwenden(rechte Maus, Zellen formatieren).

Programmlösung folgt. Muß ich mir selbst erst erarbeiten.

Gruß
Alfred

Verfasst: Fr, 07. Sep 2007 8:46
von Gerd König
Hallo Alfred,

ich habe dann nur das Problem, daß ich nicht vorher bestimmen kann, welche Spalte wie formatiert werden muß, da die Daten erst während des Exports zusammengestellt werden.

Ich habe die Exportfunktion in meine Browse-Klasse implementiert, die in ...zig verschiedenen Programmteilen verwendet wird, ich müßte also für jeden Browse ein Excelmuster anlegen :cry:

Gruß Gerd

Verfasst: Fr, 07. Sep 2007 9:01
von brandelh
Hi,

ich habe zwar mit ActiveX nichts am Hut, aber es müsste möglich sein über das Programm die Spalten zu formatieren. Gehe hierzu hin und speichere in Excel ein Macro das die Einstellungen vornimmt und sieh dir die dafür nötigen Befehle an. Dieses musst du dann in deinen ActiveX Aufruf einbauen.

Verfasst: Fr, 07. Sep 2007 9:14
von Alfred
Hallo Gerd,

so gehts mit Zahlen

Code: Alles auswählen

oSheet1:Range('A:A'):NumberFormat = '#.##0,00'
Text ist in Arbeit.

Gruß
Alfred

Verfasst: Fr, 07. Sep 2007 9:52
von Gerd König
Hallo,

ich habe das Problem gelöst.

Es lag an der Formatierung und an den Werten selbst

Formatierung als Text: "@"
Formatierung als Zahl: "0,000" mit Komma

Zahlenwert: "45.123" , "0.000" mit Punkt

Vielen Dank für eure Unterstützung

Gruß Gerd
:D :D :D

Verfasst: Fr, 07. Sep 2007 10:46
von Alfred
Hallo Hubert,

dass mit dem Makro klappt hervorragend.

Hier eine kleine Zusammenfassung:

Code: Alles auswählen

oSheet1:Range('A:A'):NumberFormat := '#.##0,00'       //1.000,23
oSheet1:Range('B:B'):NumberFormat := '0,00'           //1000,23
oSheet1:Range('C:C'):NumberFormat := '@'              //Text
oSheet1:Range('D:D'):NumberFormat := 'TT.MM.JJJJ'     //07.09.2007
oSheet1:Range('E:E'):NumberFormat := 'h:mm;@'         //10:34
Gruß
Alfred

Kann mir jemand mal erklären , wie man

Verfasst: So, 23. Sep 2007 22:13
von Snoop_Proggy_Prog
aus xbase Datenbanksätzen (Browserdaten) ein Excelsheet erzeugt.
Das hört sich sehr interessant an.