Autor Beitrag
Vegeto
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Mi 28.11.12 17:20 
Hallo alle Zusammen,

ich habe ein Problem, bei dem ich nicht mehr weiter komme, habe schon gegooglt, doch nicht's gefunden.

Also ich lade eine Excel Tabelle mittels InterOP in C#, dort will ich die Daten als CSV wieder geben, ist soweit kein Problem funktoniert auch.

Doch ein problem gibt es, also bei der Excel tabelle gibt es eine Spalte Beträge, die mit Komma (,) getrennt werden, genau so wie wir das hier in Deutschland kennen.
Doch wenn ich diese nun in die Csv-Datei schreibe nimmt er statt dem Komma(,) ein Punkt(.).
Weiß vielleicht jemand was ich ändern muss oder schreiben muss?
Habe schon beim Streamwriter in den klammern angegeben, das die Encodierung Default sein soll(so zeigt er mir Umlaute in Excel an). Doch ich schaffe es nicht die komma(,) mit punkt(.) zu erstzen.

Ich freue mich über jede Anregung.

Mit freundlichen Grüßen
Vegeto
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 28.11.12 18:58 
Hallo Vegeto,

wie genau schreibst du denn die CSV-Datei?
Für das Schreiben von Komma statt Punkt ist die Klasse CultureInfo zuständig (hat also nichts mit dem Encoding zu tun).
Viele .NET-Methoden haben einen IFormatProvider als Parameter (von dem dann CultureInfo abgeleitet ist), so daß du dann z.B. die deutsche "Kultur" übergeben kannst:
ausblenden C#-Quelltext
1:
2:
3:
CultureInfo german = new CultureInfo("de-DE"); // Deutsch (Deutschland)
decimal value = 1.23;
string valueWithComma = value.ToString(german);

Du kannst aber auch den gesamten Thread auf eine Kultur umstellen (dann brauchst du nicht den Parameter jedesmal setzen):
ausblenden C#-Quelltext
1:
2:
3:
Thread.CurrentThread.CurrentCulture = german;
// bzw. zusätzlich noch (für Anzeige-Elemente)
Thread.CurrentThread.CurrentUICulture = german;

Standardmäßig wird beim Starten eines .NET-Programms die aktuelle eingestellte Kultur (aus den Windows Systemeinstellungen) übernommen, so daß auf einem deutschen Windows eigentlich schon ein Komma erzeugt werden sollte.

Für diesen Beitrag haben gedankt: Vegeto
Vegeto Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 262



BeitragVerfasst: Do 29.11.12 09:47 
Danke Th69,

Hat schon gereicht :)
Das .ToString hat gefehlt :)

Lg