2013-12-10 2 views
4

Я использую oledb для чтения из файла excel.Чтение из файла excel с использованием oledb - пустые строки

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 будет сгенерирован другой системой, поэтому я не буду изменять его вручную.

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

+3

Пробовали ли вы с 'IMEX = 1 '? –

+0

Спасибо, я делаю это в первый раз, и я не знал об этом. Теперь он работает отлично. Спасибо огромное! –

+1

Рад, что это помогло. Прочтите [ЗДЕСЬ] (http://www.connectionstrings.com/excel-2007/), чтобы узнать больше о IMEX –

ответ

0

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

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

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

0

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

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

он будет возвращать набор данных.

0

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

Эта нить может помочь с изменением формата: Format an Excel column (or cell) as Text in C#?

Смежные вопросы