myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Office-Technologien » Wieso erkennt Filter eingegebenes Datum nicht korrekt?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wieso erkennt Filter eingegebenes Datum nicht korrekt?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
theSoulT theSoulT ist männlich
myCSharp.de-Mitglied

Dabei seit: 25.12.2018
Beiträge: 28


theSoulT ist offline

Wieso erkennt Filter eingegebenes Datum nicht korrekt?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
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? smile

theSoulT hat dieses Bild (verkleinerte Version) angehängt:
Anmerkung 2020-08-31 103100.png
Volle Bildgröße

31.08.2020 10:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.201
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
31.08.2020 11:44 Beiträge des Benutzers | zu Buddylist hinzufügen
theSoulT theSoulT ist männlich
myCSharp.de-Mitglied

Dabei seit: 25.12.2018
Beiträge: 28

Themenstarter Thema begonnen von theSoulT

theSoulT ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Abt,

ich hab es auch schon so getestet:

C#-Code:
excelWs.Range["H" + column].NumberFormatLocal = "TT.MM.JJJJ";

Leider das selbe Problem weiterhin unglücklich
31.08.2020 16:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.201
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 ;-)
31.08.2020 16:29 Beiträge des Benutzers | zu Buddylist hinzufügen
theSoulT theSoulT ist männlich
myCSharp.de-Mitglied

Dabei seit: 25.12.2018
Beiträge: 28

Themenstarter Thema begonnen von theSoulT

theSoulT ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 Daumen runter

theSoulT hat dieses Bild (verkleinerte Version) angehängt:
Anmerkung 2020-08-31 163351.png
Volle Bildgröße

31.08.2020 16:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.201
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 ;-)
31.08.2020 16:45 Beiträge des Benutzers | zu Buddylist hinzufügen
theSoulT theSoulT ist männlich
myCSharp.de-Mitglied

Dabei seit: 25.12.2018
Beiträge: 28

Themenstarter Thema begonnen von theSoulT

theSoulT ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
31.08.2020 23:17 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 1.016
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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...es-datetime.htm

(Format brauchst du entsprechend auch)

LG
01.09.2020 07:43 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.201
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zumindest bei der Arbeit mit Excel via OpenXML ist das nicht so.
OpenXML arbeitet definitiv mit DateTimeOffset und ISO8601-Format.
01.09.2020 09:20 Beiträge des Benutzers | zu Buddylist hinzufügen
Taipi88 Taipi88 ist männlich
myCSharp.de-Mitglied

avatar-3220.jpg


Dabei seit: 02.02.2010
Beiträge: 1.016
Entwicklungsumgebung: VS 2010
Herkunft: Mainz


Taipi88 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mir ging es damit nicht um bestimmte Normen - sondern vielmehr um die typisierte Vorgehensweise. Excel will genauso wenig alles string behandeln wie C#...
01.09.2020 09:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
theSoulT theSoulT ist männlich
myCSharp.de-Mitglied

Dabei seit: 25.12.2018
Beiträge: 28

Themenstarter Thema begonnen von theSoulT

theSoulT ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
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 smile

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von theSoulT am 03.09.2020 08:21.

03.09.2020 08:20 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 26.09.2020 07:35