Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi EXCEL Zellen als Datum formatieren (https://www.delphipraxis.net/124227-excel-zellen-als-datum-formatieren.html)

Remote1 17. Nov 2008 10:18


EXCEL Zellen als Datum formatieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich habe mir folgende Procedure zusammengebastelt:

Delphi-Quellcode:
procedure ListView2Excel(Listview:TListView; pfad:string);
var
  Excel : Variant;
  name,tmp : string;
  i: integer;
begin
try
  name:='ComPort';
  Excel := CreateOleObject('Excel.Application');
  Excel.Application.SheetsInNewWorkBook := 1;
  Excel.Workbooks.Add;
  Excel.Sheets[1].Name := name ;
  Excel.ActiveSheet.PageSetup.Zoom := false;
  Excel.ActiveSheet.PageSetup.FitToPagesWide := 1;
  Excel.ActiveSheet.PageSetup.FitToPagesTall := 1;
  Excel.ActiveSheet.Cells.Range['A2','A'+inttostr(2+Listview.Items.Count)].NumberFormat:='TT.MM.JJ hh:mm:ss,000';
  Excel.ActiveSheet.Cells.Range['B2','B'+inttostr(2+Listview.Items.Count)].NumberFormat:='0,0000';

  Excel.Sheets[name].Cells[1,1].value:='Zeit';
  Excel.Sheets[name].Cells[1,2].value:='Bedeutung';
  Excel.Sheets[name].Cells[1,3].value:='Daten';
  for i := 0 to (ListView.Items.Count-1) do begin
    Excel.Sheets[name].Cells[i+2,1].value := ListView.Items.Item[i].Caption;               //Zeit
    Excel.Sheets[name].Cells[i+2,2].value := ListView.Items.Item[i].SubItems.Strings[0];   //Bedeutung
    tmp:=StringReplace(ListView.Items.Item[i].SubItems.Strings[1],',','.',[rfReplaceAll]); //. ersetzen durch , da sonst Tausendertrennung bei EXCEL
    Excel.Sheets[name].Cells[i+2,3].value := tmp;    //Daten
  end;
  try
    Excel.ActiveWorkbook.SaveAs(pfad, CreateBackup := false );
  except
  end;
  Excel.Quit;
except
  application.MessageBox('Es ist ein Fehler aufgetreten.'+#10#13+'Möglicherweise ist kein EXCEL installiert!','Fehler',mb_ok+mb_iconerror);
  Excel.Quit;
end;
end;
Die Formatierung als "TT.MM.JJ hh:mm:ss,000" klappt auch insoweit, dass in EXCEL bei "Zellen formatieren" dies enthalten ist. Problem ist, dass diese Formatierung nicht richtig übernommen wird, wenn ich im nachhinein bei EXCEL ein Diagramm erstellen möchte, wird nicht die korrekte Datums-Zeitangabe auf der X-Achse geliefert. Wenn ich nun in die entsprechenden Zellen "hineingehe" und wieder "heraus" (also z.B. Zelle anklicken F2 und dann ENTER), dann wird erst von EXCEL erkannt, dass es sich um Datumsangaben handelt und alles richtig formatiert. Aus diesen Daten kann ich dann auch Diagramme zeichnen lassen. Ich habe ein EXCEL-Datei auch mal angehängt. Lässt sich alles ein wenig schwierig erklären.
Ich möchte einfach nur, dass meine Daten im richtigen Format exportiert werden, ohne diese nachträglich zu bearbeiten (zum erstellen von Diagrammen).

Chemiker 17. Nov 2008 14:47

Re: EXCEL Zellen als Datum formatieren
 
Hallo Remote1,

ersetze mal die Eigenschaft Value durch Value2. Vielleicht löst das schon Dein Problem.

Bis bald Chemiker

Remote1 17. Nov 2008 15:29

Re: EXCEL Zellen als Datum formatieren
 
bringt leider nix
Problem ist anscheinend, dass EXCEL irgendwie nicht merkt, dass die Zellen nicht als Standard formatiert sind, da die Zellenausrichtung ja linksbündig ist (wie bei Text) und erst nach dem "Bearbeiten" (F2 und Enter oder einfach Leerzeichen einfügen und wieder löschen) die Zellen richtig formatiert sind.
Gibt es irgendwie so was wie Update?

Chemiker 17. Nov 2008 16:26

Re: EXCEL Zellen als Datum formatieren
 
Hallo Remote1,

versuche das Datum und die Zeit nicht als String zu übertragen, sondern als DateTime.

Delphi-Quellcode:
ZeitString:= '17.11.08 11:11:36,656';
WS2.Cells.Range['A1','A5'].NumberFormat:='TT.MM.JJ hh:mm:ss,000';
Zeit:= strtodatetime(ZeitString);
WS2.Cells[1,1].Value2:= Zeit;
Das Problem, Excel interpretiert Dein Datum erst als String und erkennt erst nach der Bearbeitung das es sich um ein Datum handelt.
Wenn Du es direkt als Datum überträgst ist es auch Excel klar, was Du willst.

Bis bald Chemiker

Remote1 17. Nov 2008 18:02

Re: EXCEL Zellen als Datum formatieren
 
thx, hat geklappt, da hatt ich mit dem "Text" ja schon mal den richtigen Riecher^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 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