Foxtable(狐表)用户栏目专家坐堂 → 导入EXCEL


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

主题:导入EXCEL

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


加好友 发短信
等级:一尾狐 帖子:408 积分:3642 威望:0 精华:0 注册:2017/4/8 8:59:00
导入EXCEL  发帖心情 Post By:2020/9/1 11:14:00 [只看该作者]

以下是表hyjd 从外部excel表导入不重复的数据,为什么只增加了空行,没有任何数据?

excel表结构是这样的
商家 车牌 卡类 入场时间 付费时间 券号 打折类型 优惠额度(元) 备注
酒店 浙A060HK 临时卡A 2020-08-29 22:29:09 2020-09-01 02:01:03 D9BAAAD7 全免 75.00 停车券20200901
酒店 苏E96K9H 临时卡A 2020-08-31 22:13:07 2020-09-01 07:17:32 AE024701 全免 15.00 停车券20200901
酒店 京NH81H9 临时卡A 2020-08-29 21:53:05 2020-09-01 08:13:44 9BC3FB66 全免 80.00 停车券20200901
酒店 浙A59Z6V 临时卡A 2020-08-31 14:52:56 2020-09-01 08:30:46 74241D8F 全免 30.00 停车券20200901
酒店 苏MV128T 临时卡A 2020-08-31 22:39:16 2020-09-01 05:55:23 16F4E7C6 全免 15.00 停车券20200901


表hyjd结构是一样的,只是后面增加了几列,以后要设置计算公式用,以“券号” qh  作为不重复的标志

此主题相关图片如下:表.png
按此在新窗口浏览图片





Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog =DialogResult.OK Then
    Dim t As Table = Tables("hyjd")
    t.StopRedraw()
    Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Dim newcount As Integer = 0
    Dim oldcount As Integer = 0
    For n As Integer = 1 To Sheet.Rows.Count -1
        Dim r As DataRow = t.DataTable.Find("qh = '" & sheet(n, 0).text & "'")
        If r Is Nothing Then
            r = t.DataTable.AddNew()
            newcount += 1
        Else
            oldcount += 1
        End If
        For i As Integer = 0 To sheet.Cols.Count -1
            Dim cname As String = sheet(0, i).text
            If t.Cols.Contains(cname) Then
                If t.Cols(cname).IsBoolean Then
                    If sheet(n, i).Text = 1 OrElse sheet(n, i).Text = "true" Then
                        r(cname) = True
                    Else
                        r(cname) = False
                    End If
                Else
                    r(cname) = sheet(n, i).Text
                End If
            End If
        Next
    Next
    msgbox("新增" & newcount & "    " & "更新旧数据" & oldcount)
    t.ResumeRedraw()
End If
[此贴子已经被作者于2020/9/1 11:20:50编辑过]

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


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

foxtable要通过列名查询数据,而不是标题名称

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


加好友 发短信
等级:一尾狐 帖子:408 积分:3642 威望:0 精华:0 注册:2017/4/8 8:59:00
  发帖心情 Post By:2020/9/1 13:45:00 [只看该作者]

Dim r As DataRow = t.DataTable.Find("qh = '" & sheet(n, 0).text & "'")  这个是列名麻

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


加好友 发短信
等级:超级版主 帖子:107304 积分:545781 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/9/1 13:54:00 [只看该作者]

卷号是第5列,不是0列

Dim r As DataRow = t.DataTable.Find("qh = '" & sheet(n, 5).text & "'")

另外execl里面是标题名,您通过列名来判断是否不会标题名,是木有意义的
            Dim cname As String = sheet(0, i).text
            If t.Cols.Contains(cname) Then

要么先把列名和标题名的对应放到字典里,发布查询;要么遍历所有列,看哪一个列的标题等于cname ,在获取对应的列名,比如

        For i As Integer = 0 To sheet.Cols.Count -1
            Dim cname As String = sheet(0, i).text
            If t.Cols(i).caption = cname  Then
             If t.Cols(i).IsBoolean Then
……
           r(t.Cols(i).name) = sheet(n, i).Text

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


加好友 发短信
等级:一尾狐 帖子:408 积分:3642 威望:0 精华:0 注册:2017/4/8 8:59:00
  发帖心情 Post By:2020/9/1 14:03:00 [只看该作者]

谢谢老师指点

 回到顶部