dc_array2excel [erledigt]
Moderator: Moderatoren
-
- Rekursionen-Architekt
- Beiträge: 475
- Registriert: Sa, 08. Apr 2006 14:07
- Wohnort: Datteln
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
dc_array2excel [erledigt]
Hallo zusammen,
Ich habe ein 2 Dim Array das ich im Browser anzeige.
Nun will ich mit der Funktion das Array nach Excel bringen. Das habe ich bisher über einen Umweg mit einer csv gemacht.
Geht mit der Funktion ja wesentlich bequemer. Nur werden numerische Werte mit Kommastellen unter 12 in Datumswerte
konvertiert. Habe ich mal bunt gemarkt. Kann man das wohl irgendwie in den Griff bekommen ?
Die Werte werden aus einer Datenbank eingelesen. Das Feld ist N 10,2.
Ich weiß nicht wo ich ansetzten soll.
Grüße und schönes WE
Ewald
Ich habe ein 2 Dim Array das ich im Browser anzeige.
Nun will ich mit der Funktion das Array nach Excel bringen. Das habe ich bisher über einen Umweg mit einer csv gemacht.
Geht mit der Funktion ja wesentlich bequemer. Nur werden numerische Werte mit Kommastellen unter 12 in Datumswerte
konvertiert. Habe ich mal bunt gemarkt. Kann man das wohl irgendwie in den Griff bekommen ?
Die Werte werden aus einer Datenbank eingelesen. Das Feld ist N 10,2.
Ich weiß nicht wo ich ansetzten soll.
Grüße und schönes WE
Ewald
Zuletzt geändert von Ewald am Fr, 17. Okt 2014 17:41, insgesamt 1-mal geändert.
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: dc_array2excel
Hallo Ewald,
achte beim deutschen Excel darauf, das der Dezimaltrenner nicht der Punkt ist, sondenr das Komma. Excel denkt wie alle Microsoft viel zu viel mit und meint, es besser zu wissen. Und formatiert dann nach eigenen Gutdünken einfach um. In diesem Fall vermutet Excel dahinter eine Datumsangabe, die ja mit einem Punkt zwischen Monat und Jahr gekennzeichnet wäre.
Jan
achte beim deutschen Excel darauf, das der Dezimaltrenner nicht der Punkt ist, sondenr das Komma. Excel denkt wie alle Microsoft viel zu viel mit und meint, es besser zu wissen. Und formatiert dann nach eigenen Gutdünken einfach um. In diesem Fall vermutet Excel dahinter eine Datumsangabe, die ja mit einem Punkt zwischen Monat und Jahr gekennzeichnet wäre.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 475
- Registriert: Sa, 08. Apr 2006 14:07
- Wohnort: Datteln
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dc_array2excel
Hallo Jan,
hast du denn eine Idee, ob bzw. wie ich das verhindern kann ? Auf der Excel-Seite kann ich nicht eingreifen. Das kann sich ja bei jedem Anwender ändern.
Und der Dezimaltrenner in Xbase ist ja nun mal der Punkt.
Gruß
Ewald
hast du denn eine Idee, ob bzw. wie ich das verhindern kann ? Auf der Excel-Seite kann ich nicht eingreifen. Das kann sich ja bei jedem Anwender ändern.
Und der Dezimaltrenner in Xbase ist ja nun mal der Punkt.
Gruß
Ewald
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: dc_array2excel
Ewald,
schreib in das Array reinDamit wird das dann zwar als String und nicht als Zahl übergeben, aber das merkt Excel wiederum ebenfalls aus purer innerer Intelligenz und stellt das korrekt dar.
Jan
schreib in das Array rein
Code: Alles auswählen
Transform(cAlias->nWert, "999,999.99")
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 475
- Registriert: Sa, 08. Apr 2006 14:07
- Wohnort: Datteln
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dc_array2excel
das hatte ich schon. Wenn ich das so mache hackt Excel in der Darstellung die Kommastellen ab. Werden ja als solche nicht mehr erkannt
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: dc_array2excel
Hallo Ewald,
das wundert mich aber. Ich mach das ständig so, und es klappt. Allerdings nicht mit der eXpress++-Funktion, weil ich damit nicht arbeite. Aber über csv. UNd da erkennt Excel das ganz korrekt als Dezimalzahl.
Was wäre denn mit? Ist aber im Endeffekt fast das Gleiche.
Jan
das wundert mich aber. Ich mach das ständig so, und es klappt. Allerdings nicht mit der eXpress++-Funktion, weil ich damit nicht arbeite. Aber über csv. UNd da erkennt Excel das ganz korrekt als Dezimalzahl.
Was wäre denn mit
Code: Alles auswählen
StrTran(Str(cAlias->nWert), ".", ",")
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 475
- Registriert: Sa, 08. Apr 2006 14:07
- Wohnort: Datteln
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dc_array2excel
Hallo Jan,
das hat sich jetzt überschnitten. Wenn ich die Wert mit dem Einlesen ins Array wie von dir beschrieben transformiere funktioniert das in Excel doch. Es werden nur die letzten Nullen abgeschnitten. Die kann sich aber jeder nach Belieben wiederholen.
Auf der Xbase-Seite ist das ganze natürlich etwas unbefriedigend, da ich so ein Array ja nicht mehr beliebig editieren und zum Rechnen verwenden kann ohne hin und her zu wandeln.
Da muss ich noch ein wenig weiterfeilen.
Gruß
Ewald
das hat sich jetzt überschnitten. Wenn ich die Wert mit dem Einlesen ins Array wie von dir beschrieben transformiere funktioniert das in Excel doch. Es werden nur die letzten Nullen abgeschnitten. Die kann sich aber jeder nach Belieben wiederholen.
Auf der Xbase-Seite ist das ganze natürlich etwas unbefriedigend, da ich so ein Array ja nicht mehr beliebig editieren und zum Rechnen verwenden kann ohne hin und her zu wandeln.
Da muss ich noch ein wenig weiterfeilen.
Gruß
Ewald
-
- Rekursionen-Architekt
- Beiträge: 475
- Registriert: Sa, 08. Apr 2006 14:07
- Wohnort: Datteln
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dc_array2excel
Da ich Beides (einfaches Browsen/Editieren und Excelexport) nicht unter eine Hut bekommen habe ich mich für ein zweites Array entschieden, in dem ich die nummerischen Werte aus "alief" nur für den ExcelExport in Strings umsetze.
Code: Alles auswählen
function liefexcel(alief)
local getlist:={},aexcel:={}
aexcel=aclone(alief)
for i = 1 to len(aexcel)
aexcel[i,5]=transform(aexcel[i,5],"@E 999,999.99")
aexcel[i,6]=transform(aexcel[i,6],"@E 999,999.99")
aexcel[i,7]=transform(aexcel[i,7],"@E 999,999.99")
next
DC_Array2Excel('C:\PPS\EXPORT.XLS',{aexcel})
return .t.
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: dc_array2excel [erledigt]
hi,
sicherlich kannst du die Daten vorher "aufbereiten" und dann an Excel übergeben aber wenn du Excel "sagst" was für ein Daten Type die Column hat dann wandelt Excel auch deutsche "N" und "D" Typen richtig um.
sicherlich kannst du die Daten vorher "aufbereiten" und dann an Excel übergeben aber wenn du Excel "sagst" was für ein Daten Type die Column hat dann wandelt Excel auch deutsche "N" und "D" Typen richtig um.
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 475
- Registriert: Sa, 08. Apr 2006 14:07
- Wohnort: Datteln
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dc_array2excel [erledigt]
Moin Jimmy,
wie kann ich das machen ? Ich kann ja nur meine Anwendung weitergeben. Was der User (im Regelfall kenne ich ihn nicht) für ein Excel einsetzt und was der da eingestellt hat weiß ich also nicht. Ergo müsste ich aus meiner Anwendung heraus die Infos mitgeben.
Gruß
Ewald
wie kann ich das machen ? Ich kann ja nur meine Anwendung weitergeben. Was der User (im Regelfall kenne ich ihn nicht) für ein Excel einsetzt und was der da eingestellt hat weiß ich also nicht. Ergo müsste ich aus meiner Anwendung heraus die Infos mitgeben.
Gruß
Ewald
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: dc_array2excel [erledigt]
siehe dir mal in C:\exp19\Source\Dclipx\_dcfunct.prg die FUNCTION DC_Array2Excel() an.Ewald hat geschrieben:wie kann ich das machen ?
In Zeile 4539 müsste eine FOR NEXT kommen
Code: Alles auswählen
FOR i := 1 TO nRows
FOR j := 1 TO nColumns
// hier ansetzen
IF i = 1 // es reicht 1 Mal
// Type bestimmen zum formatieren der oSheet:Columns(j):XXXformat
ENDIF
aData[nSheet,i,j] := Alltrim(DC_XtoC(aData[nSheet,i,j]))
aData[nSheet,i,j] := Strtran(aData[nSheet,i,j],'=','')
// aData[nSheet,i,j] := Strtran(aData[nSheet,i,j],'-','')
NEXT
NEXT
nun hat Roger ja auch die FUNCTION DC_WorkArea2Excel() welche im selben *.PRG ist.
ab Zeile 4273 werden die Felder zusammengestellt und auch die Formatierung (z.b. o:NumberFormat ) vorgenommen.
wenn man nun nach Zeile 4539 die vorgeschlagenen Änderungen vornimmt dann musst du dich später nicht mehr weiter um die Umwandlung kümmern.
gruss by OHR
Jimmy
Jimmy
-
- Rekursionen-Architekt
- Beiträge: 475
- Registriert: Sa, 08. Apr 2006 14:07
- Wohnort: Datteln
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: dc_array2excel [erledigt]
Moin Jimmy,
habe ich nachgesehen.
Jetzt wird mir auch klar, warum mein Original-Array - nachdem ich es durch die Funktion gejagt habe - im Browse zum Teil ganz merkwürdig aussah .
Gruß
Ewald
habe ich nachgesehen.
Jetzt wird mir auch klar, warum mein Original-Array - nachdem ich es durch die Funktion gejagt habe - im Browse zum Teil ganz merkwürdig aussah .
Gruß
Ewald