Foxtable(狐表)用户栏目专家坐堂 → 导入EXCEL时怎样判断空值与重复值


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

主题:导入EXCEL时怎样判断空值与重复值

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


加好友 发短信
等级:童狐 帖子:255 积分:2286 威望:0 精华:0 注册:2020/6/28 8:43:00
导入EXCEL时怎样判断空值与重复值  发帖心情 Post By:2021/7/15 7:58:00 [只看该作者]

导入EXCEL时怎样判断空值。
比如,在EXCEL里有一列“物料编号”, 在导入在狐表时,怎么写代码判断:

1,物料编号不能为空值,否则弹窗提示存在空值,导入动作取消。

 2,物料编号不能有重复值(包括后台数据,数据库使用的是SQL数据库)。否则跳过该行EXCEL数据的导入。继续往下一行...



 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107649 积分:547554 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/15 9:03:00 [只看该作者]

参考:http://www.foxtable.com/webhelp/topics/2334.htm

判断是否空值加一个判断即可

Dim bh As String = sheet(n,0).Text
if bh > "" then
原来的导入代码

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


加好友 发短信
等级:童狐 帖子:255 积分:2286 威望:0 精华:0 注册:2020/6/28 8:43:00
  发帖心情 Post By:2021/7/15 9:19:00 [只看该作者]

我的代码是这样的,你帮我看下哪里出错了:

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim cmd As New SQLCommand
    Dim dt As Date
    cmd.C
    cmd.CommandText = "Select GetDate()"
    dt = cmd.ExecuteScalar()
    Dim c As Integer = 0
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("物料信息").StopRedraw()
    '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
    Dim nms() As String = {"项目编号","模具编号","物料编号","物料名称","图档尺寸","材料","数量","精毛料","重量","采购规格","备注"}
    '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
    '======================================先判断是否存在空白的物料编号
    For m As Integer = 1 To Sheet.Rows.Count -1
        
        If sheet(m,3).Text > "" Then
            MessageBox.Show("存在物料编号为空白的行,请重新检查后再导入")
            Return
        End If
    Next
    '=========================================先判断是否存在空白的物料编号
    
    For n As Integer = 1 To Sheet.Rows.Count -1
        Dim bh As String = sheet(n,2).Text
        If sheet(n,4).Text <> "" Then
            If DataTables("物料信息").Find("物料编号 = '" & bh & "'") Is Nothing Then '如果不存在同编号的订单
                c = c + 1
                Dim r As Row = Tables("物料信息").AddNew()
                For m As Integer = 0 To nms.Length - 1
                    r(nms(m)) = Sheet(n,m).Value
                Next
                r("制单人") = User.Name
                r("制单日期") = dt

图片点击可在新窗口打开查看此主题相关图片如下:snipaste_2021-07-15_09-17-53.png
图片点击可在新窗口打开查看

            End If
        Else
            MessageBox.Show("存在物料编号为空白的行,请重新检查后再导入")
            Exit For
        End If
    Next
    Tables("物料信息").ResumeRedraw()
    DataTables("物料信息").Save
    MessageBox.Show("导入完成,共导入" & c & "条记录")
End If



 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107649 积分:547554 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/15 9:25:00 [只看该作者]

If sheet(m,3).Text > "" Then

改为

If sheet(m,3).Text = "" Then

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


加好友 发短信
等级:童狐 帖子:255 积分:2286 威望:0 精华:0 注册:2020/6/28 8:43:00
  发帖心情 Post By:2021/7/15 9:47:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:1.gif
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:物.png
图片点击可在新窗口打开查看
还是不行啊!


图片点击可在新窗口打开查看此主题相关图片如下:编.png
图片点击可在新窗口打开查看


 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107649 积分:547554 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/15 9:49:00 [只看该作者]

说明确实有空值,比如20、21...行。还不如不要判断这个,直接空行的就跳过即可,继续下一行

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


加好友 发短信
等级:童狐 帖子:255 积分:2286 威望:0 精华:0 注册:2020/6/28 8:43:00
  发帖心情 Post By:2021/7/15 9:54:00 [只看该作者]

我目的是想控制录入员,  导入时必须加上物料编号。


物料编号是唯值 ,因为后续 生产排期都会根据这个来,我担心他们录个空值入来,后续会出错。

有没有其它办法可以控制这一点?不一定要导入的时候来判断?

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107649 积分:547554 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/7/15 9:58:00 [只看该作者]

考虑使用vba获取真正的行数和列数,参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=92748

 回到顶部