2012-04-10 3 views
1

Я импортирую excel в DataTable. Файл excel содержит ячейки 50x7 с данными. Проблема заключается в том, что метод Fill() импортирует строки 368 (?), Независимо от того, что данные находятся в первых 50 из них. Любая идея, что может быть проблемой?OleDbDataAdapter Fill метод импорта большего количества строк

Я использую OleDbDataAdapter для импорта.

connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=Excel 8.0;"; 
string commandString = "select * from [" + worksheetName + "]"; 
OleDbDataAdapter adapter = new OleDbDataAdapter(commandString, connectionString); 
DataTable fileTable = new DataTable(); 
adapter.Fill(fileTable); 
+0

Вы пробовали удалять строки с 51 по 369; на листе Excel, чтобы убедиться, что это устраняет проблему? –

+0

Что означает удаление строк в Excel? Есть пустые строки, и когда я прокручиваю вниз в файле, появляется больше строк. Я не думаю, что они в реале. Поправьте меня, если я ошибаюсь –

+1

У меня были проблемы с листами Excel, в которых, похоже, в строках ничего нет, но по какой-то причине они срабатывают при импорте. Несмотря на то, что похоже, что нечего удалять, всегда стоит попробовать. –

ответ

1

Попробуйте удалить пустые ячейки из DataTable:

adapter.Fill(fileTable); 
fileTable = fileTable.AsEnumerable() 
      .Where(row => !row.ItemArray.All(f => f is System.DBNull || String.IsNullOrWhiteSpace(f.ToString()))) 
      .CopyToDataTable(); 

Обратите внимание, что он также удаляет пустые строки внутри листа.

+0

«System.Data.DataTable» не содержит определения для «AsEnumerable» и никакого метода расширения «AsEnumerable», принимающего первый аргумент типа «Система». Data.DataTable '(вам не хватает директивы using или ссылки на сборку?) –

+0

Если вы используете .NET 2.0 или ниже, вы не можете использовать LINQ. Затем вы можете создать свой DataTable вручную через читателя OleDbCommand. –

+0

Нет, я использую NET 4.0 –

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