Nach Erzeugen von CSV-Datei führende Nullen in PLZ weg

Beantwortet Nach Erzeugen von CSV-Datei führende Nullen in PLZ weg

  • Dienstag, 4. Dezember 2012 18:28
     
      Enthält Code

    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!

Alle Antworten

  • Dienstag, 4. Dezember 2012 19:30
     
     Beantwortet

    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!