Bonjour,
je cherche à générer un fichier CSV. J'utilise ce code pour la construction :
L'envoi à l'utilisateur se fait ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 private void BuildCsv(ref MemoryStream memStream) { StreamWriter sw = new StreamWriter(memStream,System.Text.Encoding.UTF8); sw.WriteLine("Un texte de résumé"); // En-tête sw.WriteLine(String.Format("\"{0}\" ; \"{1}\" ; \"{2}\" ; \"{3}\" ; \"{4}\" ; \"{5}\" ; \"{6}\"", col1, col2, col3, col4, col5, col6, col7)); // Donnees foreach (IStnDes res in maliste) { sw.WriteLine(String.Format("\"{0}\" ; \"{1}\" ; \"{2}\" ; \"{3}\" ; \"{4}\" ; \"{5}\" ; \"{6}\"", res.ch1, res.ch2, res.ch3, res.ch4, res.ch5, res.ch6, res.ch7)); } // Nettoyage du streamwritter sw.Flush(); sw.Close(); }
Avec ceci, lorsque je suis en UTF8, les accents passent bien mais Excel ne "voit" pas les colonnes (tout est importé dans la même colonne).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 byte[] byteArray = memStream.ToArray(); //Nettoyage du MemoryStream memStream.Flush(); memStream.Close(); // Nettoyage du contenu de sortie Context.Response.Clear(); // Header HTTP qui donne le fichier par défaut à aller chercher Context.Response.AddHeader("Content-Disposition", "attachment; filename=" + strCsvFileName + ".csv"); // Header HTTP qui contient la taille de fichier Context.Response.AddHeader("Content-Length", byteArray.Length.ToString()); // MIME type Context.Response.ContentType = "application/octet-stream"; // Ecriture des données binaire sur le flux de sortie Context.Response.BinaryWrite(byteArray);
Si j'encode en ASCII, les accents sont affichés comme des points d'interrogation, mais les colonnes sont bien "détectées".
Je ne comprends pas bien pourquoi... donc si vous aviez une piste !
Merci d'avance !
Alban
Partager