2017-10-02 11 views
1

j'ai rencontré quelque chose de vraiment bizarre. Lors de l'exportation au format CSV, ma ligne supérieure affiche les guillemets, mais les lignes ci-dessous.VB .Net lors de l'exportation au format CSV problème lors de l'affichage dans MS Excel

J'utilise UTF8 et ajouter manuellement les guillemets à la valeur afin qu'il soit enchâssé entre guillemets.

le code utilisé est

Dim fs As New IO.FileStream(GenericValueEditorExportFilename.Value, IO.FileMode.Create) 
     Dim writer As New IO.StreamWriter(fs, Encoding.UTF8) 
     fs.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length) 
.... 
.... 
.... 

While reader.Read 
       If reader("TargetLanguageID") = targetLanguageID Then 
        writer.WriteLine(Encode(reader("SourcePhrase")) & ", " & Encode(reader("TargetPhrase"))) 
       End If 
.... 
.... 
.... 

Friend Shared Function Encode(ByVal value As String) As String 
    Return ControlChars.Quote & value.Replace("""", """""") & ControlChars.Quote 
End Function 

le résultat lors de l'affichage dans Excel est représenté comme (https://ibb.co/ntMYdw)

quand j'ouvrir le fichier dans Notepad ++ le texte est affiché comme ci-dessous. Mais chaque ligne est affichée différemment. Pourquoi est-ce que la première rangée les affiche et la deuxième ne le montre pas. Bloc-notes ++ résultat est affiché sous la forme (https://ibb.co/fMkWWG)

+0

Répondre aux questions sur le code que j'ai écrit il y a environ 5 ans. Hmmmm –

+0

hahah ouais je l'ai vu, cela me déconcertant. La seule chose qui a été changé est le codage et la solution que vous avez envoyé ci-dessous ne sert à rien. tout vérifié. Maintenant, j'ai ajouté plus de données .. 1 colonne est conforme à l'encapsulation "texte et l'autre ne fonctionne pas. Microsoft pour vous>. < https://imgur.com/a/XH1OP – Grant

+0

Le point décimal dans la première ligne , au lieu d'une virgule, est assez bizarre. –

Répondre

0

Ainsi, la question a été causée par la nomenclature qui a été créé pour définir manuellement l'encodage du fichier en début d'écriture dans le fichier.

fs.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length) 

La suppression de cette résout par problème et le fichier reste dans le codage UTF8 désiré comme il est défini sur l'auteur de flux. il n'est donc pas nécessaire d'ajouter la nomenclature pour définir l'encodage.

0

Quelque chose comme cela devrait fonctionner pour vous.

Dim str As New StringBuilder 

For Each dr As DataRow In Me.NorthwindDataSet.Customers 

    For Each field As Object In dr.ItemArray 

    str.Append(field.ToString & ",") 

    Next 

    str.Replace(",", vbNewLine, str.Length - 1, 1) 

Next 



Try 

    My.Computer.FileSystem.WriteAllText("C:\temp\testcsv.csv", str.ToString, False) 

Catch ex As Exception 

    MessageBox.Show("Write Error") 

End Try 
+0

Merci, mais ce ne était pas la cause de la question, il a été la nomenclature au début du fichier que j'utilisais pour définir manuellement l'encodage du fichier, même par l'écriture de flux utilisait UTF8. termes d'efficacité Iin le constructeur de chaîne est préférable d'utiliser. – Grant