以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请教狐爹!实现 EXCEL2007 “删除重复项”功能  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=16203)

--  作者:hyl168
--  发布时间:2012/2/5 15:12:00
--  请教狐爹!实现 EXCEL2007 “删除重复项”功能

有以下代码,以实现自动删除“表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
--  发布时间:2012/2/5 15:37:00
--  

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

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

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

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


--  作者:hyl168
--  发布时间: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
--  发布时间: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
--  发布时间:2012/2/6 9:59:00
--  

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

 

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

 

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

 

谢谢您的耐心指点。