Foxtable(狐表)用户栏目专家坐堂 → 求助!导入EXCEL表数据全部为文本


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

主题:求助!导入EXCEL表数据全部为文本

美女呀,离线,留言给我吧!
0799snow
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
求助!导入EXCEL表数据全部为文本  发帖心情 Post By:2019/5/29 17:50:00 [只看该作者]

这个是你刚才给我的代码,导入数据成功了,但是为文本格式,我需要对这个是"交易时间","金额","数量"定义为时间格式、和双精度小数格式。
此主题相关图片如下:qq图片20190529174315.png
按此在新窗口浏览图片我在窗口设计里点执行按钮后,绑定的明细表就为空了,但是我已经定义为“ture”了,以上二个问题,请您解答,谢谢!!
Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
If dlg.ShowDialog = DialogResult.OK Then
    OutPut.Show("你选择了" & dlg.FileNames.Length & "个文件, 分别是:")
    For Each fl As String In dlg.FileNames
        Dim Book As New XLS.Book(fl)
Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Next
End If
Tables("明细表").StopRedraw()
'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String ={"卡号","交易时间","金额","数量"}
'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题 
Dim Sheet As XLS.Sheet = Book.Sheets(0)
For n As Integer = 4 To Sheet.Rows.Count -1 
    Dim sj As String = sheet(n,2).Text 
Next
    If DataTables("明细表").Find("交易时间 = '" & sj & "'") Is Nothing Then '如果不存在同编号的订单
        Dim r As Row = Tables("明细表").AddNew()
        For m As Integer = 0 To nms.Length - 1
            r(nms(m)) = Sheet(n,m).Value
    Next 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/29 18:03:00 [只看该作者]

 

具体实例发上来测试。

 

 


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


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
求助,导入后绑定的表为空  发帖心情 Post By:2019/5/30 9:02:00 [只看该作者]

导入后绑定的表为空,导入的EXCEL表内为文本,对时间列和金额列不能转换成日期和双精度小数列
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试项目.table


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/30 9:10:00 [只看该作者]

1、你设置【明细表】的时候,把日期列、数值列等,改成对应的格式啊,不要都用字符格式啊。

 

2、删除这句代码         Tables("明细表").StopRedraw()

 


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


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
求助,删除那行代码后,就只能导入一个表的数据了  发帖心情 Post By:2019/5/30 9:30:00 [只看该作者]

删除那行代码后,就只能导入一个表的数据了,我可选多个表导入,但是只有第一个表的数据,后面我再选第二个表可以导入,之前是文本格式的对这个时间列重复的可以自动不导入,现在定义为日期列了就不能识别了,我需要对[卡号]和[交易时间]同时相同的行不重复导入,需要怎么修改 If DataTables("明细表").Find("交易时间 = '" & sj & "'") Is Nothing Then '如果不存在同编号的订单


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/30 9:51:00 [只看该作者]

Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
If dlg.ShowDialog = DialogResult.OK Then
    OutPut.Show("你选择了" & dlg.FileNames.Length & "个文件, 分别是:")
    Tables("明细表").StopRedraw()
    For Each fl As String In dlg.FileNames
        Dim Book As New XLS.Book(fl)
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String ={"卡号","交易时间","金额","数量"}
        '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        For n As Integer = 4 To Sheet.Rows.Count -1
            Dim sj As String = sheet(n,2).Text
            If DataTables("明细表").Find("交易时间 = #" & sj & "#") Is Nothing Then '如果不存在同编号的订单
                Dim r As Row = Tables("明细表").AddNew()
                For m As Integer = 0 To nms.Length - 1
                    r(nms(m)) = Sheet(n,m).Value
                Next
            End If
        Next
    Next
    Tables("明细表").ResumeRedraw
End If

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


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
求助,还是出错  发帖心情 Post By:2019/5/30 9:59:00 [只看该作者]

提示错误:该字符串未被识别为有效的 DateTime。
然后还是只能导入小部分数据

 回到顶部
美女呀,离线,留言给我吧!
0799snow
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
用这个代码后,明细表又为空了  发帖心情 Post By:2019/5/30 10:00:00 [只看该作者]

用这个代码后,明细表又为空了

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/30 10:41:00 [只看该作者]

Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
If dlg.ShowDialog = DialogResult.OK Then
    OutPut.Show("你选择了" & dlg.FileNames.Length & "个文件, 分别是:")
    For Each fl As String In dlg.FileNames
        Dim Book As New XLS.Book(fl)
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String ={"卡号","交易时间","金额","数量"}
        '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        For n As Integer = 4 To Sheet.Rows.Count -1
            Dim sj As String = sheet(n,2).Text
            Dim d As Date
            Date.TryParse(sj, d)
            Dim fdr As DataRow
            If d = Nothing Then
                fdr = DataTables("明细表").Find("交易时间 is null")
            Else
                fdr = DataTables("明细表").Find("交易时间 = #" & d & "#")
            End If
            If fdr Is Nothing Then '如果不存在同编号的订单
                Dim r As Row = Tables("明细表").AddNew()
                For m As Integer = 0 To nms.Length - 1
                    r(nms(m)) = Sheet(n,m).Value
                Next
            End If
        Next
    Next
End If

 回到顶部
美女呀,离线,留言给我吧!
0799snow
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:131 积分:834 威望:0 精华:0 注册:2019/3/19 8:23:00
还是不行啊  发帖心情 Post By:2019/5/30 11:19:00 [只看该作者]

需要导入的excel表格里定义为日期列数据,日期型的数据,报错了,从字符串“1880”到类型“Date”的转换无效。然后就也只导入一小部分数据就中止了

 回到顶部
总数 91 1 2 3 4 5 6 7 8 9 10 下一页