Hallo Helmi,
hatte mir mal eine Funktion geschrieben um immer die entsprechende Formatierung zu erhalten.
Delphi-Quellcode:
function GetFieldDataType(QueryField: TField): Ansistring;
const
FORMAT_GENERAL = 'General';
FORMAT_STANDARD = 'Standard';
FORMAT_TEXT = '@';
FORMAT_DEZIMAL = '0.00';
FORMAT_INTEGER = '0';
FORMAT_DATE = 'dd.mm.yyyy';
FORMAT_DATETIME = 'dd.mm.yyyy hh:mm:ss';
FORMAT_CURRENCY = '$#,##0.00_);[Red]($#,##0.00)';
FORMAT_TIME = 'hh:mm:ss';
begin
//if QueryField.FieldName = 'Gesamtsumme' then ShowMessage(TMTools.FieldTypeToStr(QueryField.DataType));
case QueryField.DataType of
ftUnknown: Result := FORMAT_TEXT;
ftAutoInc: Result := FORMAT_INTEGER;
ftString: Result := FORMAT_TEXT;
ftSmallint: Result := FORMAT_DEZIMAL;
ftInteger: Result := FORMAT_INTEGER;
ftWord: Result := FORMAT_STANDARD;
ftBoolean: Result := FORMAT_TEXT;
ftFloat: Result := FORMAT_DEZIMAL;
ftCurrency: Result := FORMAT_CURRENCY;
ftDate: Result := FORMAT_DATE;
ftDateTime: Result := FORMAT_DATETIME;
ftMemo: Result := FORMAT_TEXT;
ftWideMemo: Result := FORMAT_TEXT;
ftBCD: Result := FORMAT_INTEGER;
ftTime: Result := FORMAT_TIME;
else Result := FORMAT_TEXT;
end;
end;
Hat bisher immer funktioniert.
Text also mit @ formatieren. Und immer daran denken, die Formatierung auszuführen bevor du die Zelle füllst.
Ein Aufruf könnte dann so aussehen:
Delphi-Quellcode:
Excel.Sheets[TableName].Cells[Zeile, Spalte].NumberFormat := GetFieldDataType(SourceQuery.Fields[I]);
Excel.Sheets[TableName].Cells[Zeile, Spalte].Value := SourceQuery.Fields[I].AsString;