Einzelnen Beitrag anzeigen

Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Excel: Zelle als "Text" formatieren

  Alt 10. Sep 2013, 21:48
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;
  Mit Zitat antworten Zitat