Foxtable(狐表)用户栏目专家坐堂 → 时期时间型数据导入后为何时间部分归0


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

主题:时期时间型数据导入后为何时间部分归0

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/7 22:08:00 [显示全部帖子]


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/8 9:08:00 [显示全部帖子]

 不能用 XLS.Book ,这个东西有bug,不能获取时间的。

 

 必须使用vba,也就是2楼的例子才行。


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/8 9:15:00 [显示全部帖子]

试试下面代码,如果有问题,请把你的excel文件发上来测试。

 

'Syscmd.Table.QuickMerge()
Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "excel文件|*.xls;*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim App As New MSExcel.Application
    try
        Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
        Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
        Tables("总表").StopRedraw()
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"地区","车号","序号","时间","发动机水温(℃)","水上液压油温(℃)","风扇传动油温(℃)","变速箱油温(℃)", _
        "分动箱油温(℃)","油底壳温度(℃)","动力舱内温(℃)","发动机油压(Mpa)","储气瓶I压力(Mpa)","储气瓶II压力(Mpa)", _
        "水上液压油压(Mpa)", "变速箱油压(Mpa)","电流(A)","电压(V)","转速(rpm)","车速(km/h)","中置油箱油量", _
        "车尾油箱油量", "总里程(km)","本次里程(km)","行驶摩托小时(h:m)","总摩托小时(h:m)"}
        '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        Dim rg = ws.UsedRange
        For n As Integer = 2 To rg.Rows.Count
            Dim r As Row = Tables("总表").AddNew()
            Dim ss() As String
            For m As Integer = 0 To nms.Length - 3
                r(nms(m)) = ws.cells(n,m+1).Value
            Next
            r(nms(3)) = ws.cells(n,4).text
            ss = ws.cells(n,nms.Length - 2 + 1).Value.split(":")
            r(nms(nms.Length - 2)) = cdbl(cint(ss(0))*3600 +cint(ss(1))*60)
            ss = ws.cells(n,nms.Length - 1+1).Value.split(":")
            r(nms(nms.Length - 1)) = cdbl(cint(ss(0))*3600 +cint(ss(1))*60)
        Next


    catch ex As exception
        msgbox(ex.message)
    finally

        app.quit
        Tables("总表").ResumeRedraw()
    End try
   
End If

[此贴子已经被作者于2017/5/8 10:20:22编辑过]

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/8 10:17:00 [显示全部帖子]

 项目和excel文件发上来测试。


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/8 10:42:00 [显示全部帖子]

 参考2楼、5楼去做,不会做,上传具体项目。

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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/8 10:52:00 [显示全部帖子]

用下面的代码,我测试6秒左右

 

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "excel文件|*.xls;*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
    Dim App As New MSExcel.Application
    try
        Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
        Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
        Tables("总表").StopRedraw()
        '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"地区","车号","序号","时间","发动机水温(℃)","水上液压油温(℃)","风扇传动油温(℃)","变速箱油温(℃)", _
        "分动箱油温(℃)","油底壳温度(℃)","动力舱内温(℃)","发动机油压(Mpa)","储气瓶I压力(Mpa)","储气瓶II压力(Mpa)", _
        "水上液压油压(Mpa)", "变速箱油压(Mpa)","电流(A)","电压(V)","转速(rpm)","车速(km/h)","中置油箱油量", _
        "车尾油箱油量", "总里程(km)","本次里程(km)","行驶摩托小时(h:m)","总摩托小时(h:m)"}
        '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        Dim rg = ws.UsedRange
        Dim ary = rg.value
        For n As Integer = 2 To rg.Rows.count
            Dim r As Row = Tables("总表").AddNew()
            Dim ss() As String
            For m As Integer = 0 To nms.Length - 3
                r(nms(m)) = ary(n,m+1)
            Next
            r(nms(3)) = ary(n,4)
            ss = ary(n,nms.Length - 2 + 1).split(":")
            r(nms(nms.Length - 2)) = cdbl(cint(ss(0))*3600 +cint(ss(1))*60)
            ss = ary(n,nms.Length - 1+1).split(":")
            r(nms(nms.Length - 1)) = cdbl(cint(ss(0))*3600 +cint(ss(1))*60)
        Next
       
    catch ex As exception
        msgbox(ex.message)
    finally
        app.quit
        Tables("总表").ResumeRedraw()
    End try
End If


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/8 11:37:00 [显示全部帖子]

11楼的代码,在例子里面,我测试没问题。

 

你是不是还写了其它代码?

 

你试试重启你的电脑,再测试一下。


 回到顶部