Bonjour a tous,
j'ai un problème avec le format CSV. En effet les données que j'exporte peuvent contenir n'importe quel type de caractères comme les points virgules ou les guillemets, or le format csv utilise les points-virgules comme séparateur de données. Pour régler ce 1er problème j'ai délimité mes données par des guillemets. Maintenant les points virgules sont bien reconnus comme faisant partie de mes données mais les guillemets sont maintenant interprétés comme séparateur. J'aimerais que ma procédure fonctionne pour les 2 cas et a priori c'est faisable puisque j'ai essayé de crée le fichier a partir d'excel et celui-ci est crée correctement (même si les données contiennent ces fameux caractères).
Si quelqu'un possède une routine qui fonctionne dans tous les cas comme le fait excel ça intéresserait beaucoup.
En vous remerciant pour votre aide.
Voici le code que j'utilise :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 Imports System.IO Module modExportCSV Dim BaseColonnesName As New List(Of String) Public Sub ExportCSV(ByVal TableName As String) Dim SaveFileDialog As New SaveFileDialog Dim FichierName = "" With SaveFileDialog 'On spécifie l'extension de fichiers visibles .Filter = "All Files (*.*)|*.*|Fichiers csv (*.csv) | *.csv" .FilterIndex = 2 'On affiche et teste le retour du dialogue If .ShowDialog = Windows.Forms.DialogResult.OK Then 'On récupère le nom du fichier FichierName = .FileName Else : Exit Sub End If End With If FichierName.EndsWith(".csv") Then Else FichierName = FichierName & ".csv" End If Try Dim sw As StreamWriter = New StreamWriter(FichierName, False, System.Text.Encoding.Default) Dim Separ As Char() = {CChar(";")} 'Remplissage des en-têtes de colonnes Dim dt As DataTable = objDBDataSet.Tables(TableName) Dim HeadersText As String = Nothing Dim col As DataColumn For Each col In dt.Columns HeadersText &= """" & col.ColumnName & """;" Next sw.WriteLine(HeadersText) 'Remplissage des cellules a partir des données Dim RowCount As Integer Dim row As DataRow Dim Item As Object For Each row In dt.Rows Dim RowText As String = Nothing For Each Item In row.ItemArray Dim _Type As Type = Item.GetType Dim _TypeCode As TypeCode = Type.GetTypeCode(_Type) Select Case _TypeCode Case TypeCode.DateTime ' Si c'est un champ date on met en forme la date : Dim _Date As DateTime = CDate(Item) RowText &= """" & _Date.ToString("dd/MM/yyyy HH:mm:ss") & """;" Case Else RowText &= """" & Item.ToString & """;" End Select Next ' On supprime le dernier caractère de séparation avant décrire la ligne : RowText = RowText.TrimEnd(Separ) sw.WriteLine(RowText) RowCount += 1 Next sw.Close() sw.Dispose() MessageBox.Show(String.Format("{0} ligne(s) exportée(s) avec succés", RowCount), "Données exportées", MessageBoxButtons.OK, MessageBoxIcon.Information) Catch ex As Exception MessageBox.Show(ex.Message, "Une erreur est survenue", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub End Module
Partager