Как я могу удалить пустые строки из DataTable из Excel? - PullRequest
1 голос
/ 21 июня 2010

У меня такая же проблема. Но разница в том, что мои пустые строки находятся посередине, и у меня более 50 столбцов. Пользователь хочет видеть дублированные строки, поэтому я не могу использовать SELECT DISTINCT * FROM [excel]

Пустые строки могут быть где угодно. Наибольшее превосходство, с которым я столкнулся, имеет более 100 000 строк.

Есть ли более эффективный способ УДАЛИТЬ пустые строки или ОБЯЗАТЕЛЬНО я должен выполнить цикл и проверить все столбцы в каждой строке ??

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

Ответы [ 2 ]

6 голосов
/ 21 июня 2010

EDIT

Это удалит все строки, которые в каждом из столбцов не содержат ничего или пробелов:

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

Один из способов достижения - это проверить пустое значение

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

{
    dv.Table = myDatatable;
    dv.AllowDelete = true;
    dv.AllowEdit = true;
    dv.AllowNew = true;
    dv.RowFilter = "myField = ' '";
}
1 голос
/ 10 апреля 2018

Попробуйте

1002 *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...