CSV на самом деле .... Значения, разделенные точкой с запятой ... (Экспорт в Excel в AZERTY) - PullRequest
3 голосов
/ 27 мая 2010

Я немного запутался здесь.

Когда я использую Excel 2003 для экспорта листа в CSV, он фактически использует точки с запятой ...

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

Теперь, когда я читаю csv с помощью драйверов Microsoft, он ожидает запятую и видит список как один большой столбец ???

Я подозреваю, что 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 ]

9 голосов
/ 27 мая 2010

Один из способов - использовать приличную библиотеку 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"];
    }
}
3 голосов
/ 27 мая 2010

Проверьте, какой разделитель указан на вашем компьютере. Панель управления> Региональные и языковые параметры> вкладка Региональные параметры - нажмите кнопку «Настроить». Там есть опция под названием «Разделитель списка». Я подозреваю, что это точка с запятой.

0 голосов
/ 10 марта 2016
  • Решение для Немецкая Windows 10 :

Change Windows system delimiter

  • Упомяните, чтобы изменить десятичный разделитель на . и, возможно, тысячи разделителей на (тонкий пробел).

Не могу поверить, что это правда ... Значения, разделенные запятыми разделяются точкой с запятой?

0 голосов
/ 30 января 2015

Как упомянуло dendarii, разделитель CSV, который использует Excel, определяется вашими региональными настройками, в частности символом «разделитель списка». (И Excel делает это ошибочно, на мой взгляд, так как он называется файлом, разделенным запятой) *

ОДНАКО, если это все еще не решит вашу проблему, есть еще одно возможное осложнение:

Проверьте свой символ «группировка цифр» и убедитесь, что НЕ запятая.

При экспорте десятичных чисел Excel возвращается к точке с запятой, а группировка цифр также установлена ​​на запятую. Установка группировки цифр на полную остановку / период (.) Решила это для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...