以文本方式查看主题 - 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 -- 谢谢,可以了。只是没有错误提示,我明天自己加上去再测试一下。 |