以文本方式查看主题

-  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=175351)

--  作者:jygyyl
--  发布时间:2022/3/1 18:05:00
--  [求助]合并excel数据
求教,如何实现在合并过程中查找是否存在"证件号码"和"管号"相同的行,存在跳过,不存在则增加?下面代码如何修改?

Dim dlg As new OpenFileDialog
dlg.Filter = "excel文件|*.xls;*.xlsx"
dlg.MultiSelect = True
If dlg.ShowDialog = DialogResult.OK Then
    For Each f As String In dlg.FileNames
        Dim  Book As New XLS.Book(f)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("jcjgsbsj").StopRedraw()
        Dim nms() As String = {"姓名","证件号码","核酸检测结果","核酸检测时间","核酸检测机构","管号","行政区名称"}
        For n As Integer = 1 To Sheet.Rows.Count -1
            Dim bh As String = sheet(n,1).Text
            MessageBox.Show("\'"& bh &"\'")
            If bh = "" Then
                DataTables("jcjgsbsj").LoadTop = "100"
                DataTables("jcjgsbsj").Load
                Tables("jcjgsbsj").ResumeRedraw()
                Exit For
            Else
                Dim dr As DataRow = DataTables("jcjgsbsj").Find(" 证件号码 = \'" & bh & "\'")
                If dr Is Nothing Then \'如果不存在同批号的订单
                    dr =  DataTables("jcjgsbsj").AddNew()
                End If
                For m As Integer = 0 To nms.Length - 1
                    If nms(m) > "" Then
                        dr(nms(m)) = Sheet(n,m).Value
                    End If
                Next
            End If
        Next
        Tables("jcjgsbsj").ResumeRedraw()
    Next
End If
[此贴子已经被作者于2022/3/1 18:09:06编辑过]

--  作者:有点蓝
--  发布时间:2022/3/1 20:17:00
--  
……
If dlg.ShowDialog = DialogResult.OK Then
Tables("jcjgsbsj").StopRedraw()
    For Each f As String In dlg.FileNames
        Dim  Book As New XLS.Book(f)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Dim nms() As String = {"姓名","证件号码","核酸检测结果","核酸检测时间","核酸检测机构","管号","行政区名称"}
        For n As Integer = 1 To Sheet.Rows.Count -1
            Dim bh As String = sheet(n,1).Text
            Dim gh As String = sheet(n,5).Text
            MessageBox.Show("\'"& bh &"\'")
If bh > "" andalso gh > "" Then
                Dim dr As DataRow = DataTables("jcjgsbsj").Find(" 证件号码 = \'" & bh & "\' and 管号= \'" & gh & "\'")
                If dr Is Nothing Then \'如果不存在同批号的订单
                    dr =  DataTables("jcjgsbsj").AddNew()
                For m As Integer = 0 To nms.Length - 1
                        dr(nms(m)) = Sheet(n,m).Value
                Next
                End If
next
        Next

    Next
Tables("jcjgsbsj").ResumeRedraw()
End If

--  作者:YANGDADA
--  发布时间:2022/3/2 11:22:00
--  
这个代码会不会因为不同日期存在相同证件号和管号的情况而录不进去?
--  作者:有点蓝
--  发布时间:2022/3/2 11:32:00
--  
如果有这种情况,需要怎么处理?
--  作者:YANGDADA
--  发布时间:2022/3/3 9:54:00
--  
添加日期的验证
--  作者:有点蓝
--  发布时间:2022/3/3 10:06:00
--  
和管号的用法一样,也加到查询条件里
--  作者:jygyyl
--  发布时间:2022/3/8 9:29:00
--  回复:(有点蓝)……If dlg.ShowDialog = DialogResu...
谢谢蓝老师,功能可以实现。但存在效率问题,提示证件号码存在,需反复点击确定才能继续,如何完善?

补充说明:管号表内允许重复,证件号码也允许重复,但管号只能使用1次,因此不存不同日期存在相同证件号和管号的情况

--  作者:有点蓝
--  发布时间:2022/3/8 10:38:00
--  
把自己代码里的MessageBox去掉咯