dc_array2excel [erledigt]

Moderator: Moderatoren

Antworten
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

dc_array2excel [erledigt]

Beitrag von Ewald »

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

Bild
Zuletzt geändert von Ewald am Fr, 17. Okt 2014 17:41, insgesamt 1-mal geändert.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: dc_array2excel

Beitrag von Jan »

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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dc_array2excel

Beitrag von Ewald »

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
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: dc_array2excel

Beitrag von Jan »

Ewald,

schreib in das Array rein

Code: Alles auswählen

Transform(cAlias->nWert, "999,999.99")
Damit 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
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dc_array2excel

Beitrag von Ewald »

das hatte ich schon. Wenn ich das so mache hackt Excel in der Darstellung die Kommastellen ab. Werden ja als solche nicht mehr erkannt ;-)
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: dc_array2excel

Beitrag von Jan »

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

Code: Alles auswählen

 StrTran(Str(cAlias->nWert), ".", ",")
? Ist aber im Endeffekt fast das Gleiche.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dc_array2excel

Beitrag von Ewald »

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
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dc_array2excel

Beitrag von Ewald »

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.
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: dc_array2excel [erledigt]

Beitrag von AUGE_OHR »

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.
gruss by OHR
Jimmy
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dc_array2excel [erledigt]

Beitrag von Ewald »

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
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: dc_array2excel [erledigt]

Beitrag von AUGE_OHR »

Ewald hat geschrieben:wie kann ich das machen ?
siehe dir mal in C:\exp19\Source\Dclipx\_dcfunct.prg die FUNCTION DC_Array2Excel() an.
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
es wird also alles nach String durch DC_XtoC() umgewandelt ... woher soll Excel nun wissen was für ein Type es ist ...

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
Ewald
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 475
Registriert: Sa, 08. Apr 2006 14:07
Wohnort: Datteln
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: dc_array2excel [erledigt]

Beitrag von Ewald »

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 :D .

Gruß
Ewald
Antworten