Foxtable(狐表)用户栏目专家坐堂 → [求助]从XLS表导入日期 时间列,时间消失


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

主题:[求助]从XLS表导入日期 时间列,时间消失

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


加好友 发短信
等级:一尾狐 帖子:405 积分:4927 威望:0 精华:0 注册:2017/2/7 7:41:00
[求助]从XLS表导入日期 时间列,时间消失  发帖心情 Post By:2024/7/16 23:42:00 [只看该作者]

"c:\更新时间.xls" 这个文件的更新时间列含有日期、时间,直接导入到狐表时,可以显示日期、时间。
但是用以下代码导入时,即丢失了“时间”(全为0:0:0)

Dim Book As New XLS.Book("c:\更新时间.xls")
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("测试").StopRedraw()
'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"序号", "更新时间"}
'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
For n As Integer = 1 To Sheet.Rows.Count - 1
    Dim r As Row = Tables("测试").AddNew()
    For m As Integer = 0 To nms.Length - 1
         r(nms(m)) = Sheet(n, m).Value
    Next
Next
Tables("测试").ResumeRedraw()

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:更新时间.xls
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:更新时间.table



[此贴子已经被作者于2024/7/16 23:44:31编辑过]

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


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

改为使用vba导:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=65686&skin=0

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


加好友 发短信
等级:一尾狐 帖子:405 积分:4927 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2024/7/17 10:23:00 [只看该作者]

以下代码导入正常

Dim dlg As New OpenFileDialog
dlg.Filter= "所有文件|*.*|Excel2003文件|*.xls|Excel2007文件|*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
   
    MessageBox.Show("你选择的是:" & dlg.FileName,"提示")
    If MessageBox.Show("是否合并?","请确 认!",MessageBoxButtons.OKCancel,MessageBoxIcon.Question) = DialogResult.OK Then
        DataTables("表A").StopRedraw
       
        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)
            Dim Rg As MSExcel.Range = Ws.UsedRange
            For n As Integer = 2 To rg.Rows.Count
                Dim ro As Row = Tables("表A").AddNew
                For i As Integer = 0 To Tables("表A").Cols.Count - 1
                    ro(i) = ws.Cells(n,i+2).Text          ‘这里要按实际列位置修改
                Next
            Next
        catch ex As exception
            msgbox(ex.message)
        finally
            DataTables("表A").ResumeRedraw
            app.quit
        End try
       
    Else
        Return
    End If
End If
MessageBox.Show("导入成功!","恭喜!")
[此贴子已经被作者于2024/7/17 21:58:21编辑过]

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


加好友 发短信
等级:一尾狐 帖子:405 积分:4927 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2024/7/17 23:42:00 [只看该作者]

不过,上面还存在一个小BUG,当XLS文件的时间列较窄,以“#######”形式显示时,上面的VBA导入代码即出错。


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


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

请参考2楼论坛提供的用法,使用数组进行转换取值,不要偷懒。

           Dim ary = rg.value
            For n As Integer = 2 To rg.Rows.Count
                Dim ro As Row = Tables("表A").AddNew
                For i As Integer = 0 To Tables("表A").Cols.Count - 1
                    ro(i) = ary(n,i+2)
                Next
            Next

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


加好友 发短信
等级:一尾狐 帖子:405 积分:4927 威望:0 精华:0 注册:2017/2/7 7:41:00
  发帖心情 Post By:2024/7/18 23:46:00 [只看该作者]

 用楼上代码可以导入“####”,谢谢!

 回到顶部