Foxtable(狐表)用户栏目专家坐堂 → 自选excel位置添加导入数据


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

主题:自选excel位置添加导入数据

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


加好友 发短信
等级:超级版主 帖子:107014 积分:544295 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/3/15 11:52:00 [只看该作者]


Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter = "excel文件|*.xls;*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Try
        Dim Book As New XLS.Book(dlg.FileName)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("基本信息").StopRedraw()
        Dim dict2 As New Dictionary(Of String, Integer)
        For c As Integer = 0 To Sheet.Cols.Count - 1
            If Tables("基本信息").Cols.Contains(Sheet(0, c).Value) Then
                dict2.add(Sheet(0, c).Value, c)
            End If
        Next
        Dim dr As DataRow
        For n As Integer = 1 To Sheet.Rows.Count - 1
            Dim bh1 As String = Sheet(n, dict2("棋赛名称")).Value
            If bh1 = "" Then Exit For
            Dim bh2 As String = Sheet(n, dict2("棋赛副名")).Value
            Dim bh3 As String = Sheet(n, dict2("编号")).Value
            Dim bh4 As String = Sheet(n, dict2("姓名")).Value
            Dim filter As String
            If bh2 = "0" OrElse bh2 = "" Then
                If bh3 = "0" OrElse bh3 = "" Then
                    filter = "[棋赛名称] = '" & bh1 & "' And [棋赛副名] is null And [编号] is null And [姓名] = '" & bh4 & "' And [身份] <> '参赛人'"
                Else
                    filter = "[棋赛名称] = '" & bh1 & "' And [棋赛副名] is null And [编号] = '" & bh3 & "' And [姓名] = '" & bh4 & "' And [身份] = '参赛人'"
                End If
            Else
                If bh3 = "0" OrElse bh3 = "" Then
                    filter = "[棋赛名称] = '" & bh1 & "' And [棋赛副名] = '" & bh2 & "' And [编号] Is null And [姓名] = '" & bh4 & "' And [身份] <> '参赛人'"
                Else
                    filter = "[棋赛名称] = '" & bh1 & "' And [棋赛副名] = '" & bh2 & "' And [编号] =" & bh3 & " And [姓名] = '" & bh4 & "' And [身份] = '参赛人'"
                End If
            End If
            dr = DataTables("基本信息").SQLFind(filter)
            If dr Is Nothing Then '如果基本信息表不存在同一棋赛名称、编号、姓名的行
                dr = DataTables("基本信息").AddNew()
            End If
            For Each key As String In dict2.Keys
                If Sheet(n, dict2(key)).text > "" Then
                    dr(key) = Sheet(n, dict2(key)).Value
                Else
                    dr(key) = Nothing
                End If
            Next
        Next
        Tables("基本信息").ResumeRedraw()
    Catch ex As exception
        MsgBox(ex.Message)
        Tables("基本信息").ResumeRedraw()
    End Try
End If

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2024/3/15 13:26:00 [只看该作者]

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:表,基本信息,DataColChanging
详细错误信息:
调用的目标发生了异常。
从字符串“”到类型“Double”的转换无效。
输入字符串的格式不正确。


只有上面的报错提示,MsgBox(ex.Message)没有弹窗,但见到正确的数据导入了。

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


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

我测试没有问题

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2024/3/15 14:12:00 [只看该作者]

我把你的代码直接复制进去,只是把
If bh1 = "" Then Exit For
改为,
            If bh1 = "" Then
                Exit For
            End If
这代码我测过,改与不改都没问题,然后就是最后你重复了一个
Tables("基本信息").ResumeRedraw()
我把上面一个删除,得出就是上面的错误提示,每导入一行,弹出一个窗口,也就是说每行都有这问题,编号在Excel表中是数值,你写成字符,我试过改为Double,反直接无法导入,用String能导入,但每行报错。
[此贴子已经被作者于2024/3/15 14:12:58编辑过]

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


加好友 发短信
等级:超级版主 帖子:107014 积分:544295 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/3/15 14:44:00 [只看该作者]

错误所在事件:表,基本信息,DataColChanging】检查这里的代码

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2024/3/15 22:33:00 [只看该作者]

不允许录入重复数据,三个变量,当时不会处理,曾在论坛问,你教我分开两段代码两个两个设置,就出现这种情况了,每次贴粘棋赛名称进去就报错,很烦人,为求速度就注识了这段代码,现在取消注识,问题又出现了,刚把代码改为现在下面这样,没错误提示了。
Select Case e.DataCol.name
    Case "编号", "姓名"
        Dim xh As String
        Dim gg As String
        If e.DataCol.Name = "编号" Then
            xh = e.NewValue
            gg = e.DataRow("姓名")
        Else
            xh = e.DataRow("编号")
            gg = e.NewValue
        End If
        If xh > "" AndAlso gg > "" Then
            Dim dr As DataRow = e.DataRow
            If e.DataTable.SQLFind("[棋赛名称] = '" & e.DataRow("棋赛名称") & "[编号] = " & xh & " And 姓名 = '" & gg & "'") IsNot Nothing Then
                MessageBox.Show("已录入姓名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
                e.Cancel = True
            End If
        End If
End Select
已改过来了。
[此贴子已经被作者于2024/3/15 22:34:31编辑过]

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


加好友 发短信
等级:超级版主 帖子:107014 积分:544295 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/3/16 8:58:00 [只看该作者]

以前编号都是有数据的,所以这个代码不会有问题。

解决方法1、编号列不能为空,比如不需要编号的,设置为-1或者0之类的值
2、类似前面10楼的用法,判断一下如果编号列没有值,把条件改为:编号 is null

 回到顶部
美女呀,离线,留言给我吧!
采菊东篱下
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
  发帖心情 Post By:2024/3/16 21:59:00 [只看该作者]

Select Case e.DataCol.name
    Case "编号", "姓名"
        Dim xh As String
        Dim gg As String
        If e.DataCol.Name = "编号" Then
            xh = e.NewValue
            gg = e.DataRow("姓名")
        Else
            xh = e.DataRow("编号")
            gg = e.NewValue
        End If
        If xh > "" AndAlso gg > "" Then
            Dim dr As DataRow = e.DataRow
            If e.DataTable.SQLFind("[棋赛名称] = '" & e.DataRow("棋赛名称") & " ' And [编号]" & IIf(e.DataRow.IsNull("编号"), " Is Null", " = " & xh) & " And [姓名] = '" & gg & "'") IsNot Nothing Then
                MessageBox.Show("已录入姓名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
                e.Cancel = True
            End If
        End If
End Select
[此贴子已经被作者于2024/3/17 21:00:18编辑过]

 回到顶部
总数 28 上一页 1 2 3