Laden...

Wieso erkennt Filter eingegebenes Datum nicht korrekt?

Erstellt von theSoulT vor 3 Jahren Letzter Beitrag vor 3 Jahren 2.110 Views
T
theSoulT Themenstarter:in
64 Beiträge seit 2018
vor 3 Jahren
Wieso erkennt Filter eingegebenes Datum nicht korrekt?

Hallo zusammen,

ich hänge an einem kleinen Problem, was ich mithilfe der Suche und Google leider nicht lösen konnte.

Ich habe ein kleines Programm geschrieben, was in einer Excel-Tabelle das aktuelle Datum einträgt. Dieses wird auch ohne Probleme eingetragen. Leider hat Excel hier aber ein Problem mit der Filterfunktion.
Diese trennt die einzelnen Datumsteile nicht auf. Um das kurz zu erklären:
Trägt man von Hand ein Datum ein, erkennt der Filter dieses und spaltet auf in Jahr, Monat und Tag. Dann kann man zum Beispiel alle Einträge aus 2020 anzeigen lassen.

Wenn ich mit meinem Programm das Datum eintrage, wird es als komplettes Datum im Filter angezeigt. Dies kann manuell behoben werden über einen Doppelklick und ein Enter in die entsprechende Zelle.
Das ist aber ein manueller Eingriff und eigentlich unerwünscht.

Ich habe das ganze schon versucht zu lösen mit NumberFormat, was aber leider auch nicht geholfen hat. Hier mal mein Codeausschnitt:

                        
int column = LastColumn();

string[] splitData = txt_Daten.Text.Split();

excelWs.Cells[column, 3] = splitData[2];
excelWs.Cells[column, 2] = splitData[1];
excelWs.Cells[column, 1] = splitData[0];
excelWs.Cells[column, 4] = txt_Fert.Text;
excelWs.Cells[column, 8] = DateTime.Now.ToShortDateString();
excelWs.Range["H" + column].NumberFormat = "MM/DD/YYYY";
excelWs.Cells[column, 9] = DateTime.Now.ToShortTimeString();

Im Anhang noch ein Screenshot von dem Filter. Die letzte Zeile davon sollte eigentlich oben mit einsortiert werden.
Ich hoffe ihr habt eine Idee und könnt mir helfen? 🙂

16.806 Beiträge seit 2008
vor 3 Jahren

Ich habe das ganze schon versucht zu lösen mit NumberFormat, was aber leider auch nicht geholfen hat.

Haste auch mal geschaut, welches NumberFormat Excel hier will?
MM/DD/YYYY wäre jedenfalls ungewöhnlich.

OpenXML arbeitet mit ISO8601; Anpassungen werden via dateFormat-Property hinterlegt.

T
theSoulT Themenstarter:in
64 Beiträge seit 2018
vor 3 Jahren

Hallo Abt,

ich hab es auch schon so getestet:


excelWs.Range["H" + column].NumberFormatLocal = "TT.MM.JJJJ";

Leider das selbe Problem weiterhin 🙁

16.806 Beiträge seit 2008
vor 3 Jahren

Okay, und zu meiner Frage:

Haste auch mal geschaut, welches NumberFormat Excel hier will?

Oder hast einfach wild rumprobiert?
Wenn ich nach Google-Suche nach excel NumberFormat date suche sagt mir der erste Treffer Excel will hier yyyy-mm-dd.

Hinweis: MM steht ohnehin für Minuten, mm für den Monat.
Blick in die Docs würde Dir daher vermutlich nicht schaden - ist gar nicht so schwer 😉

T
theSoulT Themenstarter:in
64 Beiträge seit 2018
vor 3 Jahren

Ich hab dazu unter Zelle formatieren geschaut. Dort gibt es ja Datumsformate. Hab mal einen Screenshot angehangen.
Mit deinem Vorschlag yyyy-mm-dd klappt es leider auch nicht.

Das ist so ärgerlich... Der Text steht eigentlich richtig drin, wird nur nicht korrekt erfasst von Excel 🙄

16.806 Beiträge seit 2008
vor 3 Jahren

Excel arbeitet intern ausschließlich mit englischen Bezeichnern.
Es kann daher gar nicht sein, dass deutsche Zeichen für das Textformat verwendet werden. Excel lokalisiert hier das Format in Deine - deutsche - Sprache. Das ist aber noch lang nicht das, was nachher in der Datei steht.
Daher hab ich Dich jetzt mehrmals gefragt ob Du geschaut hast, was Excel will - hast wohl nicht.

Das Problem würde aber gar nicht bestehen, wenn Du sauber und standardisiert mit OpenXML arbeiten würdest.
So musst Dich halt manuell und mit Eigeninitative durch die Sache wursteln. Aber rumstochern, wie es aktuell der Fall ist, wird vermutlich ein langer langer Weg sein 😉

T
theSoulT Themenstarter:in
64 Beiträge seit 2018
vor 3 Jahren

Also ich hab jetzt auf deinen Hinweis hin, den Code aus der OpenXML SDK kopiert, um zu testen, wie es hier läuft.
Auch auf diesem Weg hab ich genau das selbe Fehlerbild mit dem Filter.

1.029 Beiträge seit 2010
vor 3 Jahren

Hi,

ob das dein Problem behebt oder nicht ist mir nicht bekannt.

Soweit mir bekannt - arbeitet Excel mit DateTime genauso mit DateTime wie C#, nur dass das Startdatum zum Zählen ein anderes ist. Kurzum: Das ist eine speziell interpretierte Zahl - und kein string.

Dementsprechend sollte auch die Wertzuweisung aussehen - siehe z.B.:
https://bettersolutions.com/csharp/excel-interop/dates-datetime.htm

(Format brauchst du entsprechend auch)

LG

16.806 Beiträge seit 2008
vor 3 Jahren

Zumindest bei der Arbeit mit Excel via OpenXML ist das nicht so.
OpenXML arbeitet definitiv mit DateTimeOffset und ISO8601-Format.

1.029 Beiträge seit 2010
vor 3 Jahren

Mir ging es damit nicht um bestimmte Normen - sondern vielmehr um die typisierte Vorgehensweise. Excel will genauso wenig alles string behandeln wie C#...

T
theSoulT Themenstarter:in
64 Beiträge seit 2018
vor 3 Jahren

Danke Taipi88, der Tipp war goldrichtig! Man muss das Datum als double übergeben und nicht als formatierten String. So hab ich es jetzt:


DateTime odate = DateTime.Today;
excelWs.Cells[column, 8] = odate.ToOADate();
excelWs.Range["H" + column].NumberFormat = "m/d/yyyy";

Da das Datum dann trotzdem im falschen Format war, hab ich das o.g. NumberFormat gesetzt.
Das hab ich über ein Makro ausgelesen. Komischerweise ist dieses Format Tag.Monat.Jahr.

Also nochmals danke an euch 🙂