以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 如何筛选比对两个月的数据的变化情况 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=44738) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:zhangchi96 -- 发布时间:2014/1/7 23:02:00 -- 如何筛选比对两个月的数据的变化情况 有个表,名称“比对表”,表里显示职工两个月的资料信息 <!--StartFragment -->
经过处理的结果为
处理要求:
查找在201401、201402两个月份中某个人的信息是否发生变化(对“序号”“考核”“电话”列发生变化的忽略不计)
1、如果没有变化,则删除此人的两个月的信息,
2、如果有变化,则把此人的两个月信息连续显示,并把有变化的项目内容显示为红色,
3、对在201401出现,在201402未出现的,在“年月”列显示为“本月减少”
4、对在201401没有,在201402出现的。在“年月”列显示为“本月增加”
求代码,恳求高手指点。
[此贴子已经被作者于2014-1-7 23:09:19编辑过]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:y2287958 -- 发布时间:2014/1/7 23:18:00 -- 用循环 循环过程用find查找记录 根据查找结果新增赋值
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点甜 -- 发布时间:2014/1/7 23:41:00 -- 上传一个例子吧,简单方便快捷。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:zhangchi96 -- 发布时间:2014/1/8 22:23:00 -- 想在窗体中执行后的结果样式放在电子表格里,请多指教!
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点甜 -- 发布时间:2014/1/8 23:51:00 -- 感觉还是挺不容易的…… Dim t As Table = Tables("比对表") Dim d1 As String = "201401" Dim d2 As String = "201402" Dim cls() As String = {"职务", "职称", "学科", "工资", "奖金", "合计", "考核"} Dim cs1 As C1.Win.C1FlexGrid.CellStyle = t.grid.Styles.Add("cs1") Dim cs2 As C1.Win.C1FlexGrid.CellStyle = t.grid.Styles.Add("cs2") Dim cs3 As C1.Win.C1FlexGrid.CellStyle = t.grid.Styles.Add("cs3") cs1.backcolor = Color.red cs2.backcolor = Color.blue cs3.backcolor = Color.green Dim filter1 As String = "年月 = \'" & d1 & "\'" Dim filter2 As String = "年月 = \'" & d2 & "\'" t.Filter = filter1 & " or " & filter2 t.Sort = "姓名,年月" Dim r1, r2 As Row For i As Integer = 0 To t.Rows.Count - 2 r1 = t.Rows(i) r2 = t.Rows(i+1) If r1("姓名") = r2("姓名") Then \'对比 For Each c As String In cls If r1(c) <> r2(c) Then t.Grid.SetCellStyle(i+2,t.Cols(c).Index+1,cs3) End If Next i += 1 Else If r1("年月") = d1 Then \'减少 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(i+1,j+1,cs2) Next Else If r1("年月") = d2 Then \'新增 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(i+1,j+1,cs1) Next End If End If Next r1 = t.Rows(t.Rows.Count-2) r2 = t.Rows(t.Rows.Count-1) If r1("姓名") = r2("姓名") Then \'对比 For Each c As String In cls If r1(c) <> r2(c) Then t.Grid.SetCellStyle(t.Rows.Count,t.Cols(c).Index+1,cs3) End If Next Else If r2("年月") = d1 Then \'减少 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(t.Rows.count,j+1,cs2) Next Else If r2("年月") = d2 Then \'新增 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(t.Rows.Count,j+1,cs1) Next End If End If [此贴子已经被作者于2014-1-8 23:55:19编辑过]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:zhangchi96 -- 发布时间:2014/1/9 22:07:00 -- 太震惊了,我也只是想想,没想到真能写出这样的代码,能认真看懂了也需要好几天,还真不容易,感谢专家“有点甜”的辛勤劳作,佩服“有点甜”的睿智。 代码确实看上去太难了,以致于想看懂了改改都没法了,所以只要再麻烦专家“有点甜”了
请修改: 原先要求里提到的,对于“考核”列的变化是要忽略的,姓名“王六”的信息除了“考核”列变化外其余没有变化,因此王六的信息视为没有变动,既然“王六”的信息没有变动,则有关“王六”的两个月的信息都需要删除,能帮我修改一下吗? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点甜 -- 发布时间:2014/1/9 22:37:00 -- 简单改一下,其实你只要修改前面的4行代码就可以使用了 Dim t As Table = Tables("比对表") Dim d1 As String = "201401" Dim d2 As String = "201402" Dim cls() As String = {"职务", "职称", "学科", "工资", "奖金", "合计"} Dim delCount As Integer = 0 Dim cs1 As C1.Win.C1FlexGrid.CellStyle = t.grid.Styles.Add("cs1") Dim cs2 As C1.Win.C1FlexGrid.CellStyle = t.grid.Styles.Add("cs2") Dim cs3 As C1.Win.C1FlexGrid.CellStyle = t.grid.Styles.Add("cs3") cs1.backcolor = Color.red cs2.backcolor = Color.blue cs3.backcolor = Color.green Dim filter1 As String = "年月 = \'" & d1 & "\'" Dim filter2 As String = "年月 = \'" & d2 & "\'" t.Filter = filter1 & " or " & filter2 t.Sort = "姓名,年月" Dim r1, r2 As Row Dim i As Integer = 0 Do While i < t.Rows.Count - 1 r1 = t.Rows(i) r2 = t.Rows(i+1) If r1("姓名") = r2("姓名") Then \'对比 Dim changed As Boolean = False For Each c As String In cls If r1(c) <> r2(c) Then t.Grid.SetCellStyle(i+2,t.Cols(c).Index+1,cs3) changed = True End If Next If changed = False Then r1.Delete r2.Delete delcount += 2 Else i += 2 End If Else If r1("年月") = d1 Then \'减少 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(i+1,j+1,cs2) Next Else If r1("年月") = d2 Then \'新增 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(i+1,j+1,cs1) Next End If i += 1 End If Loop r1 = t.Rows(t.Rows.Count-2) r2 = t.Rows(t.Rows.Count-1) If r1("姓名") = r2("姓名") Then \'对比 For Each c As String In cls If r1(c) <> r2(c) Then t.Grid.SetCellStyle(t.Rows.Count,t.Cols(c).Index+1,cs3) End If Next Else If r2("年月") = d1 Then \'减少 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(t.Rows.count,j+1,cs2) Next Else If r2("年月") = d2 Then \'新增 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(t.Rows.Count,j+1,cs1) Next End If End If |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:zhangchi96 -- 发布时间:2014/1/12 11:06:00 --
发现两个小问题,已上传了新的附件: 1、列名称为两行时,原来的列名“职务”,改为“职务_评定”,这时得到的结果有变化:所有颜色向上偏移了一行(原来第一行是红色的,现在“职务_评定”的“评定”两字变红色了),改了好几次参数,都因为代码的逻辑复杂,没有成功. 2、当201401和201402的数据全部相同时,有出错信息,我想是不是在 r1 = t.Rows(t.Rows.Count-2) 这句话前面加上 if t.Rows.Count>1 then .....end if 这样的判断
请指教! [此贴子已经被作者于2014-1-12 12:09:32编辑过]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:y2287958 -- 发布时间:2014/1/12 19:33:00 -- 附件是俺的做法 看看是否符合你的要求,代码比较简单易懂。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点甜 -- 发布时间:2014/1/12 19:49:00 -- 9楼比较好。改了一下之前的代码 Dim t As Table = Tables("备份") Dim d1 As String = "201401" Dim d2 As String = "201402" Dim cls() As String = {"职务_评定", "职称", "学科", "工资", "奖金", "合计"} Dim delCount As Integer = 0 Dim cs1 As C1.Win.C1FlexGrid.CellStyle = t.grid.Styles.Add("cs1") Dim cs2 As C1.Win.C1FlexGrid.CellStyle = t.grid.Styles.Add("cs2") Dim cs3 As C1.Win.C1FlexGrid.CellStyle = t.grid.Styles.Add("cs3") cs1.backcolor = Color.red cs2.backcolor = Color.blue cs3.backcolor = Color.green Dim filter1 As String = "年月 = \'" & d1 & "\'" Dim filter2 As String = "年月 = \'" & d2 & "\'" t.Filter = filter1 & " or " & filter2 t.Sort = "姓名,年月" Dim r1, r2 As Row Dim i As Integer = 0 Do While i < t.Rows.Count - 1 r1 = t.Rows(i) r2 = t.Rows(i+1) If r1("姓名") = r2("姓名") Then \'对比 Dim changed As Boolean = False For Each c As String In cls If r1(c) <> r2(c) Then t.Grid.SetCellStyle(i+t.HeaderRows,t.Cols(c).Index+1,cs3) changed = True End If Next If changed = False Then r1.Delete r2.Delete delcount += 2 Else i += 2 End If Else If r1("年月") = d1 Then \'减少 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(i+t.HeaderRows,j+1,cs2) Next Else If r1("年月") = d2 Then \'新增 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(i+t.HeaderRows,j+1,cs1) Next End If i += 1 End If Loop r1 = t.Rows(t.Rows.Count-2) r2 = t.Rows(t.Rows.Count-1) If r1("姓名") = r2("姓名") Then \'对比 For Each c As String In cls If r1(c) <> r2(c) Then t.Grid.SetCellStyle(t.Rows.Count+t.HeaderRows-1,t.Cols(c).Index+1,cs3) End If Next Else If r2("年月") = d1 Then \'减少 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(t.Rows.count+t.HeaderRows-1,j+1,cs2) Next Else If r2("年月") = d2 Then \'新增 For j As Integer = 2 To t.Cols.Count - 1 t.Grid.SetCellStyle(t.Rows.Count+t.HeaderRows-1,j+1,cs1) Next End If End If |