2010-05-27 9 views
3

Je suis un peu confus ici.CSV est en fait .... Valeurs séparées par un point-virgule ... (Export Excel sur AZERTY)

Lorsque j'utilise Excel 2003 pour exporter une feuille au format CSV, il utilise en fait ... des points-virgules

Col1;Col2;Col3 
shfdh;dfhdsfhd;fdhsdfh 
dgsgsd;hdfhd;hdsfhdfsh 

Maintenant, quand je lis le csv en utilisant les pilotes Microsoft, il attend des virgules et voit la liste comme un grand colonne ???

Je suspecte Excel d'exporter avec des points-virgules parce que j'ai un clavier AZERTY. Cependant, le lecteur CSV ne doit-il pas également prendre en compte le délimiteur différent?

Comment puis-je connaître le délimiteur approprié, et/ou lire le csv correctement?

public static DataSet ReadCsv(string fileName) 
    { 
     DataSet ds = new DataSet(); 
     string pathName = System.IO.Path.GetDirectoryName(fileName); 
     string file = System.IO.Path.GetFileName(fileName); 
     OleDbConnection excelConnection = new OleDbConnection 
     (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathName + ";Extended Properties=Text;"); 
     try 
     { 
      OleDbCommand excelCommand = new OleDbCommand(@"SELECT * FROM " + file, excelConnection); 
      OleDbDataAdapter excelAdapter = new OleDbDataAdapter(excelCommand); 
      excelConnection.Open(); 
      excelAdapter.Fill(ds); 
     } 
     catch (Exception exc) 
     { 
      throw exc; 
     } 
     finally 
     { 
      if(excelConnection.State != ConnectionState.Closed) 
       excelConnection.Close(); 
     } 
     return ds; 
    } 

Répondre

9

Une façon serait d'utiliser un decent CSV library; celui qui vous permet de spécifier le délimiteur:

using (var csvReader = new CsvReader("yourinputfile.csv")) 
{ 
    csvReader.ValueSeparator = ';'; 
    csvReader.ReadHeaderRecord(); 

    while (csvReader.HasMoreRecords) 
    { 
     var record = csvReader.ReadDataRecord(): 
     var col1 = record["Col1"]; 
     var col2 = record["Col2"]; 
    } 
} 
+1

Cela semble être une excellente bibliothèque ... Pouvons-nous l'utiliser dans une application commerciale? Nous ne pouvions pas faire cela à partir de la licence ... Aussi, avez-vous besoin d'une attribution dans notre fenêtre "A propos", et qu'est-ce que cela doit être? Merci pour votre réponse et pour avoir partagé votre bibliothèque. –

+1

Absolument - la licence est à peu près aussi permissive que possible. Pas besoin de crédits - votre upvote suffit ici :) Mais si vous l'aimez vraiment, une critique sur le site codex serait très appréciée. –

+0

Malheureusement, nous ciblons .NET 2.0 et ne pouvons pas ajouter une référence à la bibliothèque KBCsv. Nous avons essayé d'ouvrir le projet de code source, mais nous avons seulement VS2003 & VS2008. Existe-t-il une version pour .NET 2.0 disponible? Ou est-ce qu'il me manque quelque chose? Merci beaucoup :-) –

3

Vérifiez quel délimiteur est spécifié sur votre ordinateur. Panneau de configuration> Options régionales et linguistiques> onglet Options régionales - cliquez sur le bouton Personnaliser. Il y a une option appelée "Séparateur de liste". Je suspecte que ceci est réglé sur un point-virgule.

0

Comme mentionné par dendarii, le séparateur CSV qu'utilise Excel est déterminé par vos paramètres régionaux, en particulier le caractère 'séparateur de liste'. (et Excel Est-ce à tort à mon avis, comme il est appelé une virgule fichier seperated)

CEPENDANT, si cela ne marche toujours pas votre problème, il y a une autre complication possible:

Vérifiez votre ' caractère de regroupement des chiffres et assurez-vous que PAS une virgule.

Excel semble revenir au point-virgule lors de l'exportation des nombres décimaux et le groupe de chiffres est également défini sur une virgule. Le réglage du groupe de chiffres sur un point/point (.) A résolu cela pour moi.

0
  • Solution pour allemand de Windows 10:

Change Windows system delimiter

  • pour changer la mention séparateur décimal à . et peut-être des milliers de séparateurs à (espace mince) ainsi.

ne peux pas croire cela est vrai ... valeurs séparées par des virgules sont séparés par un point virgule?

+0

Parfois ... par onglets! (Je sais, n'est-ce pas?!) – Mogsdad

+0

Certains outils sauvegardent ** les valeurs séparées par des tabulations ** avec '.tsv' à la place. –