Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wieso erkennt Filter eingegebenes Datum nicht korrekt?
theSoulT
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

Wieso erkennt Filter eingegebenes Datum nicht korrekt?

beantworten | zitieren | melden

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?
Attachments
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15510
Herkunft: BW

beantworten | zitieren | melden

Zitat
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.
private Nachricht | Beiträge des Benutzers
theSoulT
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

Hallo Abt,

ich hab es auch schon so getestet:


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

Leider das selbe Problem weiterhin
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15510
Herkunft: BW

beantworten | zitieren | melden

Okay, und zu meiner Frage:
Zitat
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 ;-)
private Nachricht | Beiträge des Benutzers
theSoulT
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

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
Attachments
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15510
Herkunft: BW

beantworten | zitieren | melden

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 ;-)
private Nachricht | Beiträge des Benutzers
theSoulT
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15510
Herkunft: BW

beantworten | zitieren | melden

Zumindest bei der Arbeit mit Excel via OpenXML ist das nicht so.
OpenXML arbeitet definitiv mit DateTimeOffset und ISO8601-Format.
private Nachricht | Beiträge des Benutzers
Taipi88
myCSharp.de - Member

Avatar #avatar-3220.jpg


Dabei seit:
Beiträge: 1044
Herkunft: Mainz

beantworten | zitieren | melden

Mir ging es damit nicht um bestimmte Normen - sondern vielmehr um die typisierte Vorgehensweise. Excel will genauso wenig alles string behandeln wie C#...
private Nachricht | Beiträge des Benutzers
theSoulT
myCSharp.de - Member



Dabei seit:
Beiträge: 29

Themenstarter:

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von theSoulT am .
private Nachricht | Beiträge des Benutzers