동일한 문제가 있습니다. 하지만 차이점은 빈 행이 중간에 있고 열이 50 개 이상 있다는 점입니다. 사용자가 중복 된 행을보고 싶어하므로 SELECT DISTINCT * FROM [Excel]Excel에서 DataTable의 빈 행을 제거하려면 어떻게해야합니까?
아무 곳이나 될 수 있습니다. 지금까지 직면 한 가장 큰 Excel은 100,000 개가 넘습니다.
빈 행을 제거하는보다 효율적인 방법이 있습니까? 아니면 각 행의 모든 열을 확인하고 반복해야합니까?
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();
사전 실현하려
하나의 방법 :
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();
}
안녕 난 내가 대신 "myField"에 기록 할 수 있습니다 무엇을 당신을 위해 작동하는 경우 –
그나마 그것을 인정으로 답을 표시하는 것을 잊지 및 upvote에 난 내 편집 대답에 붙여 넣은있는 이것에 대한 해결책 .... –