CSV实际上是....分号分隔值...(在AZERTY上Excel导出)

时间:2010-05-27 08:37:26

标签: c# .net excel csv

我在这里有点困惑。

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

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

现在,当我使用Microsoft驱动程序读取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;
    } 

4 个答案:

答案 0 :(得分:9)

一种方法是使用decent CSV library;允许您指定分隔符的那个:

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 :(得分:3)

检查计算机上指定的分隔符。控制面板>区域和语言选项>区域选项选项卡 - 单击自定义按钮。那里有一个名为“列表分隔符”的选项。我怀疑这是分号。

答案 2 :(得分:0)

正如dendarii所述,Excel使用的CSV分隔符由您的区域设置决定,特别是“列表分隔符”字符。 (并且Excel在我看来错误地做了这个,因为称为一个逗号分隔文件)

但是,如果仍然无法解决您的问题,还有另一种可能的复杂情况:

检查“数字分组”字符并确保逗号。

Excel在导出十进制数字时似乎恢复为分号,并且数字分组也设置为逗号。 将数字分组设置为句号/句号(。)为我解决了这个问题。

答案 3 :(得分:0)

  • 解决德语Windows 10

Change Windows system delimiter

  • 提及将小数点分隔符更改为.,也可能将千位分隔符更改为(精简空格)。

不能相信这是真的...... 以逗号分隔的值以分号分隔?