Чтение из файла excel с использованием oledb - пустые строки

Я использую oledb для чтения из файла Excel.

    DataTable sheet1 = new DataTable();
    string excelCS = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";" + "Extended Properties=\"Excel 12.0 Xml;HDR=NO;TypeGuessRows=0;ImportMixedTypes=Text\"";

    using (OleDbConnection connection = new OleDbConnection(excelCS))
    {
        connection.Open();
        string selectSql = @"SELECT * FROM [Sheet1$]";   
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectSql, connection))
        {
            adapter.Fill(sheet1);
        }
        connection.Close();
    }

Но есть проблема с некоторыми ячейками файла.

Для некоторых ячеек вместо текста отображается пустое значение. Я попытался ввести в эти ячейки какой-то другой текст, но это не сработало - все еще получаются пустые строки. Но после удаления столбца и повторной вставки мое приложение получает правильное значение ячейки. Важно то, что проблема не во всех ячейках столбца.

Это проблема с форматом ячеек или что-то в этом роде? Этот файл Excel будет создан другой системой, поэтому я не смогу изменить его вручную.

Есть ли у кого-нибудь какие-нибудь предположения, что не так и что я могу сделать?


person Community    schedule 10.12.2013    source источник
comment
Вы пробовали с IMEX=1?   -  person Siddharth Rout    schedule 10.12.2013
comment
Спасибо, делаю это впервые и не знала об этом. Теперь работает отлично. Большое спасибо!   -  person    schedule 10.12.2013
comment
Рад, что помог. Прочтите ЗДЕСЬ, чтобы узнать больше об IMEX   -  person Siddharth Rout    schedule 10.12.2013


Ответы (3)


Используйте IMEX = 1 в конце строки подключения. Это решит вашу проблему.

Всегда использовать IMEX = 1 - это более безопасный способ получить данные для столбцов со смешанными данными. .. "

Помните, что иногда при использовании IMEX возникают ошибки, когда вы используете Update, а не Selecting.

person Mehrad    schedule 16.12.2014

с помощью этого метода преобразовать Execel в набор данных без пустой строки в С #

 public static DataSet ConvertExcelToDataTable(string FileName)  
    {
        DataSet ds = new DataSet();
        string strConn = "";

        strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + FileName + ";Extended Properties=\"Excel 8.0; HDR=YES; IMEX=1;\"";
        OleDbDataAdapter da = new OleDbDataAdapter
        ("SELECT * FROM [Sheet1$]", strConn);


        da.Fill(ds);

        return ds;          
    }  

он вернет набор данных.

person Kutty Rajesh Valangai    schedule 13.01.2016

У меня была эта проблема. Я обнаружил, что в ячейках, которые возвращали пустые значения, данные выглядели как строки, но остальные данные выглядели как числа, поэтому Excel сохранил строки в другом месте, чем числа. Я изменил формат столбца на текст, и все данные были собраны.

Этот поток может помочь с изменением формата: Отформатируйте Excel столбец (или ячейка) как текст в C #?

person Lanklaas    schedule 21.04.2017