以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  Excel导入去重复  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=59784)

--  作者:lshshlxsh
--  发布时间:2014/11/11 8:08:00
--  Excel导入去重复
各位老师,请问一下这段代码如何去掉重复内容?


Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls|Excel文件|*.xlsx" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
   \' MessageBox.Show("你选择的是:" & dlg.FileName,"提示") \'提示用户选择的文件
    Dim mg As New Merger
    mg.SourcePath =dlg.FileName
    mg.Format = "excel" \'指定格式
    mg.SourceTableName = "AA$" \'指定要合并的表
    mg.DataTableName = "表A" \'指定接收数据的表
    mg.Merge() \'开始合并
End If


--  作者:Bin
--  发布时间:2014/11/11 8:11:00
--  
要用另外的方式,编码合并才能去重复 http://www.foxtable.com/help/topics/2334.htm
--  作者:lshshlxsh
--  发布时间:2014/11/11 8:18:00
--  
这种的话Excel顺序变了就导入错位了。我在DataColChanged事件判断有重复的删除,为什么第一次重复的时候没有提示,再倒入的时候就有提示工号姓名重复?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:导入去重复.rar




Select Case e.DataCol.name
    Case "工号","姓名"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("工号") = False AndAlso dr.IsNull("姓名") = False Then
            If e.DataTable.Compute("Count([_Identify])","工号 = \'" & dr("工号") & "\' And 姓名 = \'" & dr("姓名") & "\'") > 1 Then
                MessageBox.Show("已经存在相同工号和姓名的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                CurrentTable.Current.Delete()
            End If
        End If
End Select
[此贴子已经被作者于2014-11-11 8:32:23编辑过]

--  作者:Bin
--  发布时间:2014/11/11 8:27:00
--  
统一规格顺序比较好, 

如果无法统一,可以遍历第一行(也就是标题) 进行判断

--  作者:lshshlxsh
--  发布时间:2014/11/11 8:35:00
--  
谢谢  我找到原因了


Select Case e.DataCol.name
    Case "工号","姓名"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("工号") = False AndAlso dr.IsNull("姓名") = False Then
            If e.DataTable.Compute("Count([_Identify])","工号 = \'" & dr("工号") & "\' And 姓名 = \'" & dr("姓名") & "\'") >= 1 Then
                MessageBox.Show("已经存在相同工号和姓名的行!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information)
                CurrentTable.Current.Delete()
            End If
        End If
End Select