DataSet in Excel exportieren, Integer immer 64 als Wert
Hallo zusammen,
ich versuche mich gerade an Delphi XE2. Mein Funktion für den Export in Excel aus einem DataSet heraus hat unter Delphi 5 einwandfrei funktioniert. Ich Speichere die Daten in ein ExcelArray : OLEVariant; Wenn ich dieses Array nun an Excel übergebe erscheint immer in Zahlenfeldern "64". Hat jemand eine Idee? Vielen Dank Eppos |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Zeig mal etwas Code.
|
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Delphi-Quellcode:
procedure SetExcelTable( vDS : TDataSet; vForm : TForm);
const xlWBATWorksheet = -4167; xlContinuous = 1; var XLApp: Variant; XLWorkbook: Variant; XLSheet: Variant; XLArrayData : OLEVariant; XLCellBegin: Variant; XLCellEnd: Variant; XLRange: Variant; iColumnsCount: Integer; iRowsCount: Integer; i: Integer; j: Integer; begin try XLApp.DisplayAlerts := False; Screen.Cursor := crHourGlass; try XLWorkbook := XLApp.Workbooks.Add(xlWBATWorkSheet); XLSheet := XLWorkbook.Sheets[1]; vDs.DisableControls; iRowsCount := vDS.RecordCount + 1; iColumnsCount:= vDS.FieldCount; XLArrayData := VarArrayCreate([1, iRowsCount, 1, iColumnsCount], varVariant); vDS.First; for i := 2 to iRowsCount do begin for j:= 1 to iColumnsCount do case vDS.Fields.Fields[j - 1].DataType of ftString : XLArrayData[i, j] := vDS.Fields.Fields[j - 1].AsString; ftInteger : XLArrayData[i, j] := vDS.Fields.Fields[j - 1].AsInteger; ftFloat, ftCurrency : XLArrayData[i, j] := vDS.Fields.Fields[j - 1].AsFloat; ftDate,ftDateTime : begin XLArrayData[i, j] := FormatDateTime( 'dd.mm.yyyy hh:mm:ss', vDS.Fields.Fields[j - 1].AsDateTime ); XLArrayData[i, j] := StringReplace( XLArrayData[i, j], ' 00:00:00', '', [rfReplaceAll] ); end; else ; end; vDS.Next; end; XLCellBegin := XLSheet.Cells[1, 1]; XLCellEnd := XLSheet.Cells[iRowsCount, iColumnsCount]; XLRange := XLSheet.Range[XLCellBegin, XLCellEnd]; XLRange.NumberFormat := '@'; XLRange.Value := XLArrayData; XLRange.Borders.LineStyle := xlContinuous; for i:= 1 to iColumnsCount do XLSheet.Columns[i].AutoFit; XLApp.Visible := True; vDs.EnableControls; finally vDs.EnableControls; vForm.Enabled:= True; Screen.Cursor := crDefault; XLApp.DisplayAlerts:= True; VarClear(XLArrayData); end; except vDs.EnableControls; XLApp.Quit; end; end; |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Es gibt nicht nur ftInteger sondern auch noch ftSmallint, ftWord, ftLargeint.
Delphi-Quellcode:
for j:= 1 to iColumnsCount do
case vDS.Fields.Fields[j - 1].DataType of ... else // Zelle sollte sinnvollen Wert erhalten // ohne Zuweisung ist XLArrayData[i, j] undefiniert XLArrayData[i, j] := 'unsupported datatype'; end; |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
@shima
Ich habe die Else-Anweisung hinzugeüfgt, dort springt er überhaupt nicht rein. |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Zitat:
Dann verwende mal eine Zwischenvariable für das Feld damit du besser debuggen kannst
Delphi-Quellcode:
Zusätzlich solltest du den Datentyp Variant überall durch OleVariant ersetzen.
var
f:TField; for j:= 1 to iColumnsCount do begin f := vDS.Fields.Fields[j - 1]; case f.DataType of ftString : XLArrayData[i, j] := f.AsString; ftInteger : XLArrayData[i, j] := f.AsInteger; ... |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
der Bösewicht ist
XLRange.NumberFormat := '@'; versuch es mal mit XLRange.NumberFormat := '#.##0,00'; |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Zitat:
Das ist schon mal ein grundlegender Fehler. |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Danke an Shmia und Bummi.
Ich habe die Zeile XLRange.NumberFormat := '@'; einfach auskommentiert :-D und jetzt geht es! |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Da Excel wie seine Schwester Word etwas zickig ist versuch es mal so:
Delphi-Quellcode:
Gruß
excel.activesheet.Cells.NumberFormat := '@';
K-H |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
@shmia
sicher ein Fehler den kompletten Range damit zu belegen Strings und "Datümer" beleiben aber unberührt hiervon |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Zitat:
Hat mich mal den letzten Nerv gekostet, da ich viele Strings, die auch Zahlen mit führenden Nullen enthalten konnten, übergeben musste... |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
@Olli73
geht auch! @Bummi würde nicht gehen, da Integer Felder auch mit Nachkommastellen angezeigt werden @p80286 geht nicht! |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Welche Excel-Version?
und was heißt geht nicht? Gibt's eine Fehlermeldung oder zeigt Excel nur keine Reaktion? (unter 2003 erzwinge ich so den text) Gruß K-H |
AW: DataSet in Excel exportieren, Integer immer 64 als Wert
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz