2012-04-10 60 views
1

我正在将Excel导入到DataTable中。 excel文件包含50x7的数据单元格。 问题是Fill()方法导入368(?)行,无论数据是否在前50个。任何想法可能是什么问题?OleDbDataAdapter填充方法导入更多行

我使用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工作表中查看是否清除问题? – 2012-04-10 11:58:39

+0

什么意思是删除Excel中的行?有空行,当我在文件中向下滚动时,会出现更多行。我不认为他们真的在文件中。请纠正我,如果我错了请 – 2012-04-10 12:01:10

+1

我有类似的问题与Excel表,因为它看起来像行中没有任何东西,但由于某种原因,他们在进口时采取行动。尽管看起来没有东西需要删除,但总是值得一试。 – 2012-04-10 12:04:18

回答

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'的定义,也没有接受类型为'System'的第一个参数的扩展方法'AsEnumerable'。 Data.DataTable'可以被发现(你是否缺少使用指令或程序集引用?) – 2012-04-10 12:23:10

+0

如果您使用的是.NET 2.0或更低版本,则无法使用LINQ。然后,您可以通过OleDbCommand的阅读器手动构建您的DataTable。 – 2012-04-10 12:33:21

+0

不,我正在使用NET 4.0 – 2012-04-10 12:34:49