CSV实际上是…分号分隔值…(AZERTY上的Excel导出)

我在这里有点困惑。

当我使用Excel 2003将工作表导出为CSV时,实际上使用分号…

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

现在,当我阅读使用微软的驱动程序的CSV,它期待逗号,并将列表看作一个大列?

我怀疑Excel导出分号,因为我有一个AZERTY键盘。 但是,CSV阅读器是不是也要考虑到不同的分隔符?

我怎样才能知道适当的分隔符,和/或正确读取CSV?

  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; } 

一种方法是只使用一个体面的CSV库 ; 一个让你指定分隔符的:

 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"]; } } 

检查您的计算机上指定的分隔符。 控制面板>区域和语言选项>区域选项选项卡 – 单击自定义button。 有一个选项叫做“列表分隔符”。 我怀疑这是设置为分号。

正如dendarii所提到的,Excel使用的CSV分隔符是由您的区域设置确定的,特别是“列表分隔符”字符。 (而Excel在我看来这是错误的,因为它被称为逗号分隔文件)

但是,如果这仍然不能解决你的问题,还有另一个可能的复杂性:

检查您的“数字分组”字符,并确保不是逗号。

导出十进制数字时,Excel似乎还原为分号,并且数字分组也设置为逗号。 设置数字分组完全停止/句点(。)为我解决了这个问题。

  • 德语版Windows 10的解决scheme:

更改Windows系统分隔符

  • 提到将小数点分隔符更改为. 也许有成千上万的分隔符 (薄空间)。

不能相信这是真的… 逗号分隔的值是用分号隔开的吗?