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


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

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

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


加好友 发短信
等级:八尾狐 帖子:1881 积分:10368 威望:0 精华:0 注册:2019/4/6 8:45:00
自选excel位置添加导入数据  发帖心情 Post By:2024/3/12 17:14:00 [只看该作者]

'这是自选Excel位置导入生成的新表方法:
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter = "excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim ip As New Importer
    ip.SourcePath = dlg.FileName '指定数据文件
    ip.NewTableName = "基本信息
    ip.Format = "Excel"
    ip.Import() '导入
End If

  我想自选Excel位置把数据添加到基本信息表中:
Dim Book As New XLS.Book
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter = "excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim Sheet As XLS.Sheet = dlg.FileName
    Tables("基本信息").StopRedraw()
    Dim nms() As String = {"棋赛名称", "棋赛副名", "编号", "姓名", "身份"}
    Dim i1 As Integer = Array.Indexof(nms, "棋赛名称")
    Dim i2 As Integer = Array.Indexof(nms, "编号")
    Dim i3 As Integer = Array.Indexof(nms, "姓名")
    For n As Integer = 1 To Sheet.Rows.Count - 1
        Dim bh1 As String = sheet(n, i1).Text
        Dim bh2 As Integer = sheet(n, i2).Value
        Dim bh3 As String = sheet(n, i3).Text
        Dim dr As DataRow = DataTables("基本信息").SQLFind("[棋赛名称] = '" & b1 & "' And [编号] =" & bh2 & " And [姓名] ='" & bh3 & "'")
        If dr Is Nothing Then '如果不存在同编号的订单
            dr = DataTables("基本信息").AddNew()
        End If
        For m As Integer = 0 To nms.Length - 1
            dr(nms(m)) = Sheet(n, m).Value
        Next
    Next
    Tables("基本信息").ResumeRedraw()
End If
绿色代码是自选Excel位置,导入新生成的表数据的方法,现在我想自选Excel位置把Excel中的数据添加到已存在且有数据,这些数据是以前的基本信息,与本些无关,不允许重复输入的数据,我这样写,红色标注部份能指定XLS.Book中的Sheet,这个表不一定在第一位置,也可能是4、5、6或任意定置。
[此贴子已经被作者于2024/3/12 17:43:33编辑过]

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


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

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter = "excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("基本信息").StopRedraw()
    Dim nms() As String = {"棋赛名称", "棋赛副名", "编号", "姓名", "身份"}

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


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

为什么是Book.Sheets(0),0表示第一个表吧?但我打开的表不一定在第一啊。

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


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

怎么知道要用第几个呢?靠猜的么

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


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

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter = "excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0) 
    Tables("基本信息").StopRedraw()
    Dim nms() As String = {"棋赛名称", "棋赛副名", "编号", "姓名", "身份"}
    Dim i1 As Integer = Array.Indexof(nms, "棋赛名称")
    Dim i2 As Integer = Array.Indexof(nms, "编号")
    Dim i3 As Integer = Array.Indexof(nms, "姓名")
    For n As Integer = 1 To Sheet.Rows.Count - 1
        Dim bh1 As String = sheet(n, i1).Text
        Dim bh2 As Integer = sheet(n, i2).Value
        Dim bh3 As String = sheet(n, i3).Text
        Dim dr As DataRow = DataTables("基本信息").SQLFind("[棋赛名称] = '" & bh1 & "' And [编号] =" & bh2 & " And [姓名] = '" & bh3 & "'")
        If dr Is Nothing Then '如果基本信息表不存在同一棋赛名称、编号、姓名的行
            dr = DataTables("基本信息").AddNew()
        End If
        For m As Integer = 0 To nms.Length - 1
            dr(nms(m)) = Sheet(n, m).Value
        Next
    Next
    Tables("基本信息").ResumeRedraw()
End If
安这代码导入,出现

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20240313205449.png
图片点击可在新窗口打开查看
excel格式是从Foxtable中以Excel格式导出基本信息表上的数据,删除数据后录入新数据再导入进行测试,结果出现上面的报错。

[此贴子已经被作者于2024/3/14 0:03:18编辑过]

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


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

        For m As Integer = 0 To nms.Length - 1
if Sheet(n, m).text > ""
            dr(nms(m)) = Sheet(n, m).Value
else
dr(nms(m)) = nothing
end if
        Next

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


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

已经改为:
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter = "excel文件|*.xls" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("基本信息").StopRedraw()
    Dim nms() As String = {"棋赛名称", "棋赛副名", "编号", "姓名", "身份"}
    Dim i1 As Integer = Array.Indexof(nms, "棋赛名称")
    Dim i2 As Integer = Array.Indexof(nms, "编号")
    Dim i3 As Integer = Array.Indexof(nms, "姓名")
    For n As Integer = 1 To Sheet.Rows.Count - 1
        Dim bh1 As String = sheet(n, i1).Text
        Dim bh2 As Integer = sheet(n, i2).Value
        Dim bh3 As String = sheet(n, i3).Text
        Dim dr As DataRow = DataTables("基本信息").SQLFind("[棋赛名称] = '" & bh1 & "' And [编号] =" & bh2 & " And [姓名] = '" & bh3 & "'")
        If dr Is Nothing Then '如果不存在同编号的订单
            dr = DataTables("基本信息").AddNew()
        End If
        For m As Integer = 0 To nms.Length - 1
            If Sheet(n, m).text > "" Then
                dr(nms(m)) = Sheet(n, m).Value
            Else
                dr(nms(m)) = Nothing
            End If
        Next
    Next
    Tables("基本信息").ResumeRedraw()
End If

依然是这样
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2022.8.18.1
错误所在事件:菜单,Excel导入基本信息,Click
详细错误信息:
从字符串“”到类型“Integer”的转换无效。
输入字符串的格式不正确。

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


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

可能是下面的问题,编号是整数列?execl路是不是有编号为空的行?


        Dim bh1 As String = sheet(n, i1).Text
        Dim bh2 As Integer = sheet(n, i2).Value
        Dim bh3 As String = sheet(n, i3).Text
        Dim dr As DataRow = DataTables("基本信息").SQLFind("[棋赛名称] = '" & bh1 & "' And [编号] =" & bh2 & " And [姓名] = '" & bh3 & "'")

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


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

对,编号列是整数形数列,裁判长、副裁判长、裁判员、编排长、仲裁长是不存在编号的,因此为空,只有参赛人才有编号。

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


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

 Dim bh1 As String = sheet(n, i1).Text
        Dim bh2 As Integer = val(sheet(n, i2).Value)
        Dim bh3 As String = sheet(n, i3).Text
        Dim dr As DataRow
if bh2=0
 dr=DataTables("基本信息").SQLFind("[棋赛名称] = '" & bh1 & "' And [编号] is null And [姓名] = '" & bh3 & "'")
else
dr=DataTables("基本信息").SQLFind("[棋赛名称] = '" & bh1 & "' And [编号] =" & bh2 & " And [姓名] = '" & bh3 & "'")
end if


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