Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi -> JSON -> EXCEL für TDateTime (https://www.delphipraxis.net/210579-delphi-json-excel-fuer-tdatetime.html)

bernhard_LA 13. Mai 2022 13:51

Delphi -> JSON -> EXCEL für TDateTime
 
ich schreibe in meine JSON files TDateTime Felder , Ergebnis
Delphi-Quellcode:
 0 Tage, 0 Stunden, 0 Minuten, 37 Sekunden .
Das Json schreibe ich als *.csv und importiere nach Excel.
Eigentlich OK, nur kann Excel mit diesem Felder nichts anfangen - es als Zeitdauer erkennen. Ich habe das Feld als Datum noch formatiert.

Wie könnte ich das Problem lösen : auf der Delphi Seite TdateTime in einen FloatWert Wandeln und dann exportieren ... gibt es einen eleganteren Weg ?

Hobbycoder 13. Mai 2022 13:58

AW: Delphi -> JSON -> EXCEL für TDateTime
 
mach doch mal in Excel solche Cellen mit Zeitangaben, exportier das nach CSV und schau was Excel draus macht. Dann könnte der umgekehrt Weg auch so gehen.

Du könntest aber auch JSON -> XML -> Excel probieren. Bei XML hast du evtl. beim mehr Formatvorgaben.

Der schöne Günther 13. Mai 2022 14:34

AW: Delphi -> JSON -> EXCEL für TDateTime
 
Liste der Anhänge anzeigen (Anzahl: 1)
Verstehe ich das richtig, dass du willst dass Excel den String "0 Tage, 0 Stunden, 0 Minuten, 37 Sekunden" als Zeit interpretiert? Warum speicherst du die Zeitdauer (
Delphi-Quellcode:
TTimeSpan
) nicht einfach als Fließkommazahl (z.B. in Sekunden) oder Zeitspanne im ISO8601-Format? Excel kommt mit beidem klar.

Beispiel Daten:
Code:
[
   {
      "text": "Hallo Welt",
      "totalSeconds": 37.0
   },
   {
      "text": "Nochmal Hallo",
      "totalSeconds": 12.5
   }
]
Ergibt nach Import in Excel (mit einer Hilfsspalte):Anhang 55085

bernhard_LA 15. Mai 2022 10:08

AW: Delphi -> JSON -> EXCEL für TDateTime
 
mit dieser TMYJSON Klasse als Lösung kann ich keinen sinnvollen Eintrag in meiner *.csv Datei erzeugen


Delphi-Quellcode:
type TMYJSON = class
      ....

      time_1  : TTimespan;
      time_2  : TTimespan;
       .....

end;



var   tick, tock: TDateTime;

begin

myJSON.Data:= TTimespan.Subtract.( tock, tick );



end;

führt zu diesem JSON, Excel Import :

Delphi-Quellcode:
......"time_1":[262460000],"time_2":[0],.......
in Excel bekomme ich nur leere Spalten

Uwe Raabe 15. Mai 2022 11:08

AW: Delphi -> JSON -> EXCEL für TDateTime
 
Ich vermute mal,
Delphi-Quellcode:
myJSON.Data
ist auch ein TTimeSpan?

Da
Delphi-Quellcode:
TTimeSpan
ein record ist, wird es von Delphi als JSON in ein Array seiner Feldwerte dargestellt. Das einzige Feld ist
Delphi-Quellcode:
FTicks
und das ist halt was man sieht.

Günther hatte aber empfohlen, die Zeitspanne als Float zu deklarieren und dort die Sekunden zu speichern:
Delphi-Quellcode:
type
  TMYJSON = class
    ....
    Data: Double; // Zeitspanne in Sekunden
    ....
  end;

var
  tick, tock: TDateTime;

begin

  myJSON.Data:= TTimespan.Subtract.( tock, tick ).TotalSeconds;

end;

bernhard_LA 15. Mai 2022 12:30

AW: Delphi -> JSON -> EXCEL für TDateTime
 
OK, werde ich auch so machen .
bedeutet aber : ich werde wieder meine Datumsdifferent als TDateTime speichern - für die Lesbarkeit im JSON Logfile,
und dann das ganze nochmals als Float in Sekunden oder Minuten und in Excel muss ich jedesmal das Feld als Datum formatieren :-(

Uwe Raabe 15. Mai 2022 13:08

AW: Delphi -> JSON -> EXCEL für TDateTime
 
Du kannst es ja auch mal als ISO8601 String probieren:

Delphi-Quellcode:
 
...
    Data: string; // als ISO8601
...

  var span: TTimespan.Subtract.( tock, tick );
  myJson.Data := Format('P%dDT%dH%dM%1.fS', [span.Days, span.Hours, span.Minutes, span.Seconds + span.Milliseconds/1000]);


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