C#做一个对excel表数据进行筛选的小程序,逻辑有点乱,求大神指导

qq_34976307 2018-01-26 02:53:43

现在有这样一个Excel表,数据格式如图,我现在已经将Excel转换成DataTable了,Excel表是乱序的,现在要筛选同一个人同一天最早进的刷卡记录和最晚出的刷卡记录,业务要求不依赖于排序,不对dataTable进行delete(),操作。

我自己写的一个版本是这样的
#region Version 1

//if (dt != null && dt.Rows.Count > 1)
//{
// dt.Columns[0].ColumnName = "F1";
// dt.Rows.RemoveAt(0);
// dt.DefaultView.Sort = "F1,F6 ASC";
// dt = dt.DefaultView.ToTable();
//}
//int j = 0;

////定义out的对比数据
//string tempNo = "";
//string tempDate = "";
//string tempFlag = "out";
////定义in的对比数据
//string tempNo2 = "";
//string tempDate2 = "";
//string tempFlag2 = "in";

//for (int i = 0; i < dt.Rows.Count; i++)
//{
// if (string.IsNullOrEmpty(dt.Rows[i][0].ToString())) //为避免最后一行为空
// {
// break;
// }
// if (i >= dt.Rows.Count)
// {
// break;
// }

// if (dt.Rows[i][6].ToString() == "in")
// {
// if (string.IsNullOrEmpty(tempNo2))
// {
// tempNo2 = dt.Rows[i][0].ToString();
// tempDate2 = dt.Rows[i][5].ToString();

// }
// else
// {
// //比较in
// if (Convert.ToDateTime(tempDate2).ToString("yyyy-MM-dd") == Convert.ToDateTime(dt.Rows[i][5]).ToString("yyyy-MM-dd"))//比较当前行和模板是否为同一天
// {
// if (Convert.ToDateTime(tempDate2) > Convert.ToDateTime(dt.Rows[i][5])) //如果当前行的时间早于模板时间,则删除模板时间行,并记录模板行下标
// {
// tempDate2 = dt.Rows[i][5].ToString();
// dt.Rows[i - 1].Delete();

// i -= 1;

// }
// else
// {
// dt.Rows[i].Delete(); //否则删除当前行
// i -= 1;
// }
// }
// else
// {
// tempDate2 = dt.Rows[i][5].ToString();

// }
// }
// }
// else
// {


// if (dt.Rows[i][6].ToString() == "out")
// {
// if (string.IsNullOrEmpty(tempNo))
// {
// tempNo = dt.Rows[i][0].ToString();
// tempDate = dt.Rows[i][5].ToString();

// }
// else
// {
// //比较out
// if (Convert.ToDateTime(tempDate).ToString("yyyy-MM-dd") == Convert.ToDateTime(dt.Rows[i][5]).ToString("yyyy-MM-dd"))
// {
// if (Convert.ToDateTime(tempDate) < Convert.ToDateTime(dt.Rows[i][5]))
// {

// tempDate = dt.Rows[i][5].ToString();
// dt.Rows[i - 1].Delete();
// i -= 1;


// }
// else
// {


// dt.Rows[i].Delete();
// i -= 1;

// }
// }
// else
// {
// tempDate = dt.Rows[i][5].ToString();

// }
// }
// }
// }
//}
...全文
799 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
大然然 2018-02-01
  • 打赏
  • 举报
回复
根本不用这么麻烦,4,5行代码就可以搞定,给你一个思路,不管是datable, 还是list ,先对用户名进行分组,然后在求 max最晚打卡时间, min最早打卡时间



另外我的代码是某个人的时间,而你的要求是每个人+ 某天的时间, 所以你分组可以用 用户名+时间(年月日)来分组

8,833

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧