Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共5 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

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

1楼
hyl168 发表于: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:

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

2楼
czy 发表于:2012/2/5 15:37:00

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

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

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

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

3楼
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编辑过]
4楼
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()

5楼
hyl168 发表于:2012/2/6 9:59:00

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

 

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

 

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

 

谢谢您的耐心指点。

共5 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .02344 s, 2 queries.