Foxtable(狐表)用户栏目专家坐堂 → 请教狐爹!实现 EXCEL2007 “删除重复项”功能


  共有10166人关注过本帖树形打印复制链接

主题:请教狐爹!实现 EXCEL2007 “删除重复项”功能

帅哥哟,离线,有人找我吗?
hyl168
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:45 积分:473 威望:0 精华:0 注册:2012/1/17 11:28:00
请教狐爹!实现 EXCEL2007 “删除重复项”功能  发帖心情 Post By:2012/2/5 15:12:00 [只看该作者]

有以下代码,以实现自动删除“表A” 的重复行 ,

 

由于本人学习水平有限,有个两问题,请狐爹耐心指导一二。

 

============================分割行========================

 

Dim dt As DataTable = DataTables("表A")
Dim hang As DataRow

With dt '开打锁行功能
    .AllowLockRow = True
    .AllowUnlockRow = True
End With

For i As Integer = 0 To dt.DataRows.count - 2  '遍历全部数据行
    hang = dt.DataRows(i)  '取当前行的值
    hang.Locked = True  '锁定当前行
       dt.DeleteFor("[列1] = " & hang("列1") & " And " & "[列2] = " & hang("列2") …… )  '删除符合N项条件的行

    hang.Locked = False '解锁当前行
Next

 

 

===========================分割线==========================

 

问题1:

第一次运行提示错误“Index was outside the bounds of the array.”  ,再次运行正常, 何解?

 

问题2:

请狐爹传授下 ,其它更加科学、高效的方式,以及涉及到的主要命令语句


 回到顶部
帅哥哟,离线,有人找我吗?
czy
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2012/2/5 15:37:00 [只看该作者]

我对excel2007没研究,不知道它是怎样删除重复项的。

你还是说说你的实际要求吧

比如,只要表中重复项目全部删除,还是保留一条多余的再删除?

还是以当前行为条件,再寻找整个表中有无重复项再删除?


 回到顶部
帅哥哟,离线,有人找我吗?
hyl168
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:45 积分:473 威望:0 精华:0 注册:2012/1/17 11:28:00
  发帖心情 Post By:2012/2/5 16:57:00 [只看该作者]

谢谢你!

 

比如有5行的内容(包含各种类型的值)完全相同,

那么保留指定的当前行(已被锁定,所以保留下来), 删除其它多余的4行(这是遍历对比的思路,其实效率较低,求指点更加精辟的方法)。

 

还有个问题就是

 

一共大概有 400多行 数据, 列字段有 14个 左右(有各种类型的值,比如数字、字符、日期等等)

 

每次打开,第一次运行代码必然会出现,“Index was outside the bounds of the array.”    再次运行就正常了。这是为什么?

[此贴子已经被作者于2012-2-5 17:16:15编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
czy
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章 三级勋章 二级勋章
等级:超级版主 帖子:6318 积分:33963 威望:0 精华:10 注册:2008/8/31 20:56:00
  发帖心情 Post By:2012/2/5 17:15:00 [只看该作者]

这种要求还是直接后台删除效率高一些,如果用遍历的方法效率会很低的。

 

比如;

 

Dim cmd As New SQLCommand
cmd.CommandText = "Delete From {表A} where [_Identify] Not In (Select max([_Identify]) From {表A} Group by 第一列,第二列)"
cmd.ExecuteNonQuery()
DataTables("表A").Load()


 回到顶部
帅哥哟,离线,有人找我吗?
hyl168
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:45 积分:473 威望:0 精华:0 注册:2012/1/17 11:28:00
  发帖心情 Post By:2012/2/6 9:59:00 [只看该作者]

使用 SQLCommand 语句 ,调试程序成功

 

高效、节能、环保,效率提高明显,还不伤手的。  赞!

 

但直接操作底层数据,没有后悔药吃,始终心里不踏实,待继续学到 SQL 章节后, 再自行改良。

 

谢谢您的耐心指点。


 回到顶部