Foxtable(狐表)用户栏目专家坐堂 → [求助]导入excel文件时有重复数据要如何处理


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

主题:[求助]导入excel文件时有重复数据要如何处理

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


加好友 发短信
等级:幼狐 帖子:50 积分:611 威望:0 精华:0 注册:2011/5/18 17:45:00
[求助]导入excel文件时有重复数据要如何处理  发帖心情 Post By:2015/12/9 15:31:00 [只看该作者]

订单明细表中项次号列设置列属性为禁止重复,然后创建一个窗口,添加导入订单按钮,编写代码如下:
Tables("订单明细表").StopRedraw()
'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"项次号","客户代码","物料名称","模具型号","规格","ET","材面","PCD","中心孔","制程","客户颜色","中文颜色","订单量","盖子","盖子备注","铭板","铭板备注","螺栓螺母","螺栓螺母备注","加工规范","钻头"}
'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
For n As Integer = 3 To Sheet.Rows.Count -15
    Dim r As Row = Tables("订单明细表").AddNew()
    For m As Integer = 0 To nms.Length - 1
        r(nms(m)) = Sheet(n,m).Value
        r("客户") = sheet(1,1).Text
        r("下单日期") = sheet(1,8).text
        r("合同号") = sheet(1,13).text
        r("订单号") = sheet(1,19).text
        r("评审交期") = sheet(Sheet.Rows.Count -13,2).Text
        r("出货方式") = sheet(Sheet.Rows.Count -12,2).text
        r("柜型") = sheet(Sheet.Rows.Count -11,2).text
        r("总方量") = sheet(Sheet.Rows.Count -10,2).text
        r("包装方式") = sheet(Sheet.Rows.Count -9,2).Text
        r("盖子铭板要求") = sheet(Sheet.Rows.Count -8,2).text
        r("刻字要求") = sheet(Sheet.Rows.Count -7,2).text
        r("螺丝扳手要求") = sheet(Sheet.Rows.Count -6,2).text
        r("贴纸要求") = sheet(Sheet.Rows.Count -5,2).Text
        r("品质标准") = sheet(Sheet.Rows.Count -4,2).text
        r("其他要求") = sheet(Sheet.Rows.Count -3,2).text
    Next
Next
End If
Tables("订单明细表").ResumeRedraw()
这样可以实现点击按钮后出现文件选择窗口,选择excel文件后(excel文件要按照模板的固定格式)将订单表中的数据导入数据库。现在的问题是,如果导入项次号重复的数据,会有个提示,但是数据依然会导入数据库,只有项次号列为空。我想实现的是出现错误提示后点确定,整条数据都不导入。另外,考虑到如果导入的数据有很多重复的,就需要不停的按确定,比较麻烦。是否可以添加一个按钮直接取消本次导入。
[此贴子已经被作者于2015/12/9 15:37:38编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/9 15:36:00 [只看该作者]


Systemready = False
Tables("订单明细表").StopRedraw()
'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"项次号","客户代码","物料名称","模具型号","规格","ET","材面","PCD","中心孔","制程","客户颜色","中文颜色","订单量","盖子","盖子备注","铭板","铭板备注","螺栓螺母","螺栓螺母备注","加工规范","钻头"}
'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
For n As Integer = 3 To Sheet.Rows.Count -15
    Dim r As DataRow = DataTables("订单明细表").Find("条件")
    If r Is Nothing Then
        r = DataTables("订单明细表").AddNew()
    End If
    For m As Integer = 0 To nms.Length - 1
        r(nms(m)) = Sheet(n,m).Value
        r("客户") = sheet(1,1).Text
        r("下单日期") = sheet(1,8).text
        r("合同号") = sheet(1,13).text
        r("订单号") = sheet(1,19).text
        r("评审交期") = sheet(Sheet.Rows.Count -13,2).Text
        r("出货方式") = sheet(Sheet.Rows.Count -12,2).text
        r("柜型") = sheet(Sheet.Rows.Count -11,2).text
        r("总方量") = sheet(Sheet.Rows.Count -10,2).text
        r("包装方式") = sheet(Sheet.Rows.Count -9,2).Text
        r("盖子铭板要求") = sheet(Sheet.Rows.Count -8,2).text
        r("刻字要求") = sheet(Sheet.Rows.Count -7,2).text
        r("螺丝扳手要求") = sheet(Sheet.Rows.Count -6,2).text
        r("贴纸要求") = sheet(Sheet.Rows.Count -5,2).Text
        r("品质标准") = sheet(Sheet.Rows.Count -4,2).text
        r("其他要求") = sheet(Sheet.Rows.Count -3,2).text
    Next
Next
End If
Tables("订单明细表").ResumeRedraw()
SystemReady = true

 


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


加好友 发短信
等级:幼狐 帖子:50 积分:611 威望:0 精华:0 注册:2011/5/18 17:45:00
  发帖心情 Post By:2015/12/14 16:27:00 [只看该作者]

折腾了几天还是没把Find(条件)这句给写好,翻了不少帮助,把自己都给给弄晕了。我希望导入数据的“项次号”要不能与订单明细表中已有的“项次号”重复才能导入,有重复则停止本次导入操作。请求帮忙把这一句补充一下,谢谢。
补充:在订单明细表的表属性中的DataColChanging事件中代码如下:
If e.DataCol.Name = "项次号" Then
    Dim dr As DataRow 
    dr = e.DataTable.Find("项次号 = '" & e.NewValue & "'")
    If dr IsNot Nothing Then
        MessageBox.Show("此项次号'" & e.NewValue & "'已经存在!")
        e.Cancel = True
        'dr.Delete()
    End If
End If
或者,在datacolchanging事件中修改代码可以实现也可以。

[此贴子已经被作者于2015/12/14 16:30:34编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2015/12/14 16:37:00 [只看该作者]

Dim r As DataRow = DataTables("订单明细表").Find("项次号 = '" & sheet(n,0).Text & "'")

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


加好友 发短信
等级:幼狐 帖子:50 积分:611 威望:0 精华:0 注册:2011/5/18 17:45:00
  发帖心情 Post By:2015/12/14 17:02:00 [只看该作者]

谢谢,可以了。只是没有错误提示,我明天自己加上去再测试一下。

 回到顶部