2012-04-10 67 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