У меня есть файл Excel в этой форме:
Column 1 Column 2 Column 3
data1 data2
data1 data2
data1 data2
data1 data2
data1 data2 data3
То есть весь столбец 3 пуст, за исключением последней строки.
Я получаю доступ к файлу Excel через OleDbDataAdapter, возвращая DataTable: вот код.
query = "SELECT * FROM [" + query + "]";
objDT = new DataTable();
objCmdSQL = this.GetCommand();
objCmdSQL.CommandText = query;
objSQLDad = new OleDbDataAdapter(objCmdSQL);
objSQLDad.Fill(objDT);
return objDT;
Дело в том, что в этом сценарии мой код возвращает DataTable только со столбцом 1 и столбцом 2.
Я предполагаю, что движок JET пытается определить тип столбца по типу самой первой ячейки в каждом столбце; в качестве первого значения null весь столбец игнорируется.
Я попытался заполнить нули, и этот код фактически возвращает все три столбца; это, очевидно, наименее предпочтительное решение, потому что мне приходится обрабатывать большое количество маленьких файлов.
Инвертирование диапазона выбора (от «A1: C5» до «C5: A1») также не работает.
Я ищу что-то более элегантное.
Я уже нашел несколько постов, обсуждающих несоответствие типов (ячейки varchar в столбцах int и наоборот), но на самом деле не нашел ничего, связанного с этим.
Спасибо за чтение!
редактировать
Странное поведение снова. Я должен работать в основном с файлами Excel 2003.xls, но поскольку на этот вопрос был дан ответ, я подумал, что смогу проверить свой код на файлах Excel 2007 .xslx.
Строка подключения следующая:
string strConn = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" + _fileName.Trim() + @";Extended Properties=""Excel 12.0;HDR=No;IMEX=1;""";
Я получаю исключение "Внешняя таблица не в ожидаемом формате", которое, как я считаю, является стандартным исключением, когда существует несоответствие версий между ACE / JET и открываемым файлом.
Строка
Provider=Microsoft.ACE.OLEDB.12.0
означает, что я использую самую последнюю версию OLEDB, я быстро осмотрелся, и эта версия используется везде, где требуется подключение к файлам .xlsx.
Я пробовал только с ванильным провайдером (только Excel 12.0, без IMEX или HDR), но получаю то же исключение.
Я на .NET 2.0.50727 SP2, может быть, время для обновления?