Nach Erzeugen von CSV-Datei führende Nullen in PLZ weg
-
Dienstag, 4. Dezember 2012 18:28
Hallo
ich habe einen httphandler, wo ich über unterschiedliche Anforderungen csv-Dateien generiere.
Jetzt habe ich aber das Problem mit den Postleitzahlen, die eine führende 0 haben. In der Datenbank ist das Feld vom type varchar. In der Prozedur selbst, die ich für die Ausgabe erzeuge, werden die führenden Nullen auch angezeigt, aber öffene ich anschließend die CSV-Datei, so sind sie weg. Ich kann sie auch nicht auf 5stellig setzen, weil auch Postleitzahlen aus der Schweiz dabei sind.
Ich hänge mal den Code an, vielleicht hat jemand eine Idee.Protected Function umw1(ByVal s As String) As String s = Replace(s, Chr(10), " ") s = Replace(s, Chr(13), " ") s = Replace(s, ";", ",") Return s End Function ''' <summary> ''' exportiert Daten aus Datatable in CSV-File ''' </summary> ''' <param name="foo">1=Seminar, 2=Kunden, 3=Hotel, 4=Semigator</param> ''' <param name="myFile">Name der Datei</param> ''' Protected Sub ExportToCSV_Download(ByVal dt As DataTable, ByVal myFile As String, ByVal foo As Integer, _ ByVal c As HttpContext, ByVal u As Boolean) c.Response.Clear() c.Response.Buffer = True c.Response.AddHeader("content-disposition", _ "attachment;filename=" & myFile & ".csv") c.Response.Charset = "" c.Response.ContentType = "application/text" c.Response.ContentEncoding = Encoding.Unicode Dim sb As New StringBuilder() For k As Integer = 0 To dt.Columns.Count - 1 sb.Append(dt.Columns(k).ColumnName + ";"c) Next sb.Append(vbCr & vbLf) For i As Integer = 0 To dt.Rows.Count - 1 For k As Integer = 0 To dt.Columns.Count - 1 If u Then sb.Append(umw1(dt.Rows(i)(k).ToString) + ";"c) Else sb.Append(umw(dt.Rows(i)(k).ToString) + ";"c) End If Next sb.Append(vbCr & vbLf) Next 'deleteZuordnung(foo) c.Response.Output.Write(sb.ToString()) c.Response.Flush() c.Response.End() End Sub Public Sub ProcessRequest(ByVal context As HttpContext) _ Implements IHttpHandler.ProcessRequest Dim zuordnung As Integer = context.Request.QueryString("zu") Dim conn As SqlConnection = New SqlConnection(InConfig.conService) Select Case zuordnung Case 4 ' Semigator Dim sqlStatement As String = "anCSVSeminar" Dim cmd As SqlCommand = New SqlCommand(sqlStatement, conn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.AddWithValue("@kursid", aufruf(4)) ExportToCSV_Download(configDT.GetData(cmd), "seminar", 4, context, True) End Select End Sub
Liebe Grüße, die Luzie!
- Verschoben Robert BreitenhoferMicrosoft Contingent Staff, Owner Mittwoch, 12. Dezember 2012 11:40 Excel (aus:ASP.NET)
Alle Antworten
-
Dienstag, 4. Dezember 2012 19:30
Hallo Luzie,
das ist ein Excelproblem, keines deiner CSV Datei oder der Anwendung. Excel hat oft leider sehr komische Ansichten, wie welche Inhalte umgewandelt werden könnten. Zahlen werden dabei mehr falsch als richtig interpretiert.
Insbesondere, wenn die CSV Datei direkt vom Webserver aus geöffnet werden soll und man keine Möglichkeit hat, Excel dazu zu bringen, die Importoptionen anpassen zu lassen, muss man dann eine Krücke bauen (die aber wahrscheinlich in anderen Programmen zu Problemen führt). Siehe dazu bspw.:
http://www.webdigi.co.uk/blog/2010/handling-leading-zero-in-csv/
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Luzie Mittwoch, 5. Dezember 2012 16:56
-
Mittwoch, 5. Dezember 2012 16:56
Hallo Stefan,
erstmal herzlichen Dank für die "Krücke".
Aber es funktioniert. Da ich die CSV-Datei in ein fremdes System hochladen muss, bin ich überrascht, aber er frißt es. :)Liebe Grüße, die Luzie!

