Foxtable(狐表)用户栏目专家坐堂 → [求助]导入数据删除重复


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

主题:[求助]导入数据删除重复

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/18 10:55:00 [显示全部帖子]


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/18 11:49:00 [显示全部帖子]

Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog =DialogResult.OK Then
    Dim t As Table = Tables("计次工作清单表")
    t.StopRedraw()
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Dim newcount As Integer = 0
    Dim oldcount As Integer = 0
    For n As Integer = 1 To Sheet.Rows.Count -1
        Dim r As DataRow = t.DataTable.sqlFind("工单号 = '" & sheet(n, 0).text & "'")
        If r Is Nothing Then
            r = t.DataTable.AddNew()
            newcount += 1
            For i As Integer = 0 To sheet.Cols.Count -1
                Dim cname As String = sheet(0, i).text
                If t.Cols.Contains(cname) Then
                    r(cname) = sheet(n, i).Text
                Else
                   
                End If
            Next
        Else
            msgbox("已存在")
            r("某列") = sheet(n, 1).text
            r("某列") = sheet(n, 2).text

            oldcount += 1
        End If
    Next
    msgbox("新增" & newcount & "    " & "更新旧数据" & oldcount)
    t.ResumeRedraw()
End If

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/10/24 9:46:00 [显示全部帖子]

1、

 

DataTables("计次工作清单表").Save()

 

改成

 

r.save()

 

2、循环每一列,获取第一行的列名

 

Dim dic As new Dictionary(of String, Integer)

For i As Integer = 0 To sheet.Cols.Count -1
    Dim cname As String = sheet(0, i).text
    If dic.ContainsKey(cname) = false then

       dic.add(cname, i)

    End If

Next

 

需要使用的时候,写,如

 

r("紧急程度") = sheet(n, dic("紧急程度")).text


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/29 15:34:00 [显示全部帖子]

Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog =DialogResult.OK Then
    Dim t As Table = Tables("计次工作清单表")
    t.StopRedraw() '停止绘制数据表
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0) 'Sheet 读取XLS表的第一个工作簿
   
    For r As Integer = 0 To sheet.Rows.count-1
        For i As Integer = 0 To sheet.Cols.Count -1
            Dim Style As XLS.Style = Book.NewStyle() '定义新样式
            style.Format = ""
            sheet(r,i).style = style
        Next
    Next
    book.save("d:\abc.xlsx")
    book = New XLS.Book("d:\abc.xlsx")
    sheet = Book.Sheets(0) 'Sheet 读取XLS表的第一个工作簿
   
   
    Dim newcount As Integer = 0 'newcount等于0
    Dim oldcount As Integer = 0
    Dim notnewcount As Integer = 0
    Dim notnewcount1 As String = "重复工单号:"
   
   
    '读取数据表的列名
    Dim dic As new Dictionary(of String, Integer)
    For i As Integer = 0 To sheet.Cols.Count -1
        Dim cname As String = sheet(0, i).text
        If dic.ContainsKey(cname) = False Then
            dic.add(cname, i)
        Else
        End If
    Next
    '结束
   
    For n As Integer = 1 To Sheet.Rows.Count -1
        Dim r As DataRow = t.DataTable.Find("工单号 = '" & sheet(n, dic("工单号")).text & "'")
        If r Is Nothing Then
            newcount += 1
            r = t.DataTable.AddNew()
        Else
            notnewcount += 1
            notnewcount1 &= vbcrlf & vbcrlf & r("工单号")
        End If
       
        oldcount += 1
        '新增行中加入工单内容
        For i As Integer = 0 To sheet.Cols.Count -1
            Dim cname As String = sheet(0, i).text
            If t.Cols.Contains(cname) Then
                If t.Cols(cname).IsDate Then
                    r(cname) = DateTime.FromOADate(sheet(n,i).value)
                Else
                    r(cname) = sheet(n, i).Text
                End If
            Else
            End If
        Next
        '结束
       
       
    Next
    msgbox("总数据 : " & oldcount &"条 ;  新增数据 : " & newcount &" 条 ; 重复工单数量: " & notnewcount & "条"  & vbcrlf & notnewcount1 ) ' 显示newcount数值
    ClipBoard.SetText(notnewcount1)
    t.ResumeRedraw() '重新绘制数据表
Else
End If

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/29 16:28:00 [显示全部帖子]

For i As Integer = 0 To sheet.Cols.Count -1
    Dim cname As String = sheet(0, i).text
    If t.Cols.Contains(cname) Then       
        If sheet(n, i).Text <> Nothing Then                       
            If t.Cols(cname).IsDate Then
                r(cname) = DateTime.FromOADate(sheet(n,i).value)
            Else
                r(cname) = sheet(n, i).Text
            End If   

        Else

            r(cname) = nothing
        End If
    Else
    End If
Next

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/29 17:09:00 [显示全部帖子]

以下是引用wumingrong1在2018/11/29 16:54:00的发言:
能不能在导入数据的过程中、有一个【进度条】显示进度。否则数据量很大的时候、导入过程时间比较久、没有任何反应不太人性化

 

1、做一个独立窗口,弹出显示;

 

http://www.foxtable.com/webhelp/scr/0793.htm

 

2、在你循环赋值那里,不断+1显示进度条即可。


 回到顶部