Hilfe!!! Export nach Excel

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Hilfe!!! Export nach Excel

Beitrag 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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

Hallo, Gerd.

Übergib mal die numerischen Werte mit Str() und ansonsten exakt wie Zeichenketten.
Herzlich,
Tom
Benutzeravatar
Lewi
1000 working lines a day
1000 working lines a day
Beiträge: 830
Registriert: Di, 07. Feb 2006 14:10
Wohnort: Hamburg
Danksagung erhalten: 2 Mal

Beitrag von Lewi »

Hallo Gerd,
hilft evtl. eine Transformierung des Dezmalstrenners von "." nach "," weiter?

Gruß, Olaf
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Beitrag von Tom »

@Lewi: Natürlich. Ein deutsches Excel erkennt den Punkt nicht als Dezimalzeichen. Also StrTran(STr(nWert,12,2),".",",") oder ähnliches.
Herzlich,
Tom
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag 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
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag 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 :?
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: Hilfe!!! Export nach Excel

Beitrag 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
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag 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
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag 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
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag 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
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag 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
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag 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.
Zuletzt geändert von brandelh am Fr, 07. Sep 2007 11:27, insgesamt 1-mal geändert.
Gruß
Hubert
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag 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
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag 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
Alfred
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 476
Registriert: Do, 03. Mai 2007 12:37
Wohnort: München

Beitrag 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
Snoop_Proggy_Prog
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 01. Aug 2007 15:53
Wohnort: Bärlin

Kann mir jemand mal erklären , wie man

Beitrag von Snoop_Proggy_Prog »

aus xbase Datenbanksätzen (Browserdaten) ein Excelsheet erzeugt.
Das hört sich sehr interessant an.
Antworten