2010-06-21 85 views
1

我有同樣的問題。但不同的是,我的空行在中間,我有超過50列。用戶希望看到重複的行,這意味着我無法使用SELECT DISTINCT * FROM [excel]我如何從Excel中的DataTable中刪除空行?

空行可能在任何地方。迄今爲止我所面對的最大的Excel有超過10萬行。

是否有更有效的方法來刪除空行或必須循環並檢查每一行中的所有列?

void SelectDataFromExcel() 
     { 

      string connectionString = ConfigurationSettings.AppSettings["ExcelConn"].ToString(); 
      OleDbConnection excelConnection = new OleDbConnection(connectionString); 
      excelConnection.Open(); 
      OleDbCommand dbCommand; 
      OleDbDataAdapter dataAdapter; 
      foreach (var sheet in Sheets) 
      { 
       dbCommand = new OleDbCommand("select DISTINCT* From[" + sheet + "$]", excelConnection); 
       System.Threading.Thread.Sleep(1000); 
       this.Invoke((MethodInvoker)delegate 
       { 
        listBox1.Items.Add("Tablo ismi: " + sheet.ToUpper(CultureInfo.InvariantCulture) + " Tablo Satır Sayısı: "+ dSet.Tables[sheet].Rows[0][0].ToString()); 
       }); 
       dataAdapter = new OleDbDataAdapter(dbCommand); 
       dTable = new DataTable(); 
       dataAdapter.Fill(dTable); 
       dTable.TableName = sheet.ToUpper(CultureInfo.InvariantCulture);; 

       ArrangedDataList(dTable); 
       FillSqlTable(dTable, dTable.TableName); 
       dTable.Dispose(); 
       dataAdapter.Dispose(); 
       dbCommand.Dispose(); 
      } 

      excelConnection.Close(); 
      excelConnection.Dispose(); 
      t1.Abort(); 
     }
+0

您好我發現這是我在我的編輯答案已粘貼的解決方案 – 2012-05-05 09:43:54

+0

不要忘記,以紀念答案接受並給予好評,如果你的作品.... – 2012-05-05 09:44:24

回答

4

編輯

這將刪除其每一個它的列包含存在或是空白的所有行:

dataTable = dataTable.Rows.Cast<DataRow>(). 
    Where(row => !row.ItemArray.All(field => field is System.DBNull || 
      string.Compare((field as string).Trim(), string.Empty) == 
                 0)).CopyToDataTable(); 

前才達到

的一種方式檢查是否有空值

DataView dv = null; 
dv = new DataView(); 

{ 
    dv.Table = myDatatable; 
    dv.AllowDelete = true; 
    dv.AllowEdit = true; 
    dv.AllowNew = true; 
    dv.RowFilter = "myField = ' '"; 
} 
+0

我可以寫,而不是「MyField的」是什麼。我的專欄數超過60! :( – Penguen 2010-06-21 13:43:44

+0

您的表格列名稱 – 2010-06-21 13:47:10

+0

我如何處理更多列? – Penguen 2010-06-21 13:56:15