2010-06-21 9 views
1

J'ai le même problème. Mais les différences sont que mes rangs vides sont au milieu et j'ai plus de 50 colonnes. L'utilisateur veut voir les lignes dupliquées, ce qui signifie que je ne peux pas utiliser SELECT DISTINCT * FROM [excel]Comment puis-je supprimer des lignes vides de DataTable d'Excel?

Les lignes vides peuvent être n'importe où. Le plus grand excel auquel j'ai fait face jusqu'ici compte plus de 100 000 lignes.

Existe-t-il un moyen plus efficace pour SUPPRIMER les lignes vides ou dois-je faire une boucle et vérifier toutes les colonnes de chaque ligne ??

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

Salut, je trouve une solution pour ce que j'ai collé dans ma réponse modifiée –

+0

Ne pas oublier de marquer comme réponse acceptée et Upvote si cela fonctionne pour vous .... –

Répondre

4

EDIT

Cela supprimera toutes les lignes dont chacune il y a des colonnes contiennent rien ou espace blanc:

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(); 

Pre

une façon de achive est de vérifier la valeur vide

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

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

Que puis-je écrire au lieu de « myField ». Ma colonne compte plus de 60 !!! :( – Penguen

+0

nom de la colonne de votre table –

+0

Comment puis-je faire pour plus de colonnes? – Penguen

Questions connexes