以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]导入excel文件时有重复数据要如何处理  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=78459)

--  作者:wofeman
--  发布时间:2015/12/9 15:31:00
--  [求助]导入excel文件时有重复数据要如何处理
订单明细表中项次号列设置列属性为禁止重复,然后创建一个窗口,添加导入订单按钮,编写代码如下:
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编辑过]

--  作者:大红袍
--  发布时间: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
--  发布时间: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编辑过]

--  作者:大红袍
--  发布时间:2015/12/14 16:37:00
--  
Dim r As DataRow = DataTables("订单明细表").Find("项次号 = \'" & sheet(n,0).Text & "\'")
--  作者:wofeman
--  发布时间:2015/12/14 17:02:00
--  
谢谢,可以了。只是没有错误提示,我明天自己加上去再测试一下。