Foxtable(狐表)用户栏目专家坐堂 → 导入excel的日期数据不能完整地显示时间


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

主题:导入excel的日期数据不能完整地显示时间

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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
导入excel的日期数据不能完整地显示时间  发帖心情 Post By:2024/6/26 17:01:00 [显示全部帖子]

图片点击可在新窗口打开查看

原文件有上面这样的时间数据,我用代码将这些数据导入

Dim Book As New XLS.Book(dlg.FileName)
    Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Tables("APS排产导入").StopRedraw()

    '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
    
    Dim nms() As String = {"目的地","订单编号","产品说明","资源名称","数量","已排程的开始日期","已排程结束日期"}
    '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
    
    Dim k() As Integer = {1,2,3,4,5,7,8}
    Dim w As Integer
    Dim f As String
    Dim q As Date
    Dim q1 As Date
    w =dlg.FileName.LastIndexOf("\")
    f = dlg.FileName.SubString(w+1)
    
    q = f.SubString(7,9)
    
    For n As Integer = 2 To Sheet.Rows.Count -1
         q1 =  Sheet(n,7).Text.SubString(0,10)
        If q1 = q Then
            
            
            Dim r As Row = Tables("APS排产导入").AddNew()
            For m As Integer = 0 To nms.Length - 1
                
                r(nms(m)) = Sheet(n,k(m)).Value

                r("导入文件名") = f
                
                r("文件名日期") = q

            Next
        End If
    Next
    
    Tables("APS排产导入").ResumeRedraw()
    
    MessageBox.Show("导入完成!")
    
    Tables("APS排产导入").DataTable.Save
    
End If
但显示的是

图片点击可在新窗口打开查看
,请问应该如何做才能正常显示?

[此贴子已经被作者于2024/6/26 17:04:31编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2024/6/27 10:05:00 [显示全部帖子]

Dim dlg As New OpenFileDialog '定义一个新的OpenFileDialog
dlg.Filter= "Excel2003文件|*.xls|Excel2007文件|*.xlsx" '设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then '如果用户单击了确定按钮
   
    Dim App As New MSExcel.Application
    Dim Book As MSExcel.WorkBook = App.WorkBooks.Open(dlg.FileName)
    'Dim Sheet As XLS.Sheet = Book.Sheets(0)
    Dim Sheet As MSExcel.WorkSheet = Book.WorkSheets(1)
    Dim Rg As MSExcel.Range = Sheet.UsedRange
    Tables("APS排产导入").StopRedraw()
    
    '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
    
    Dim nms() As String = {"目的地","订单编号","产品说明","资源名称","数量","已排程的开始日期","已排程结束日期"}
    '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
    
    Dim k() As Integer = {2,3,4,5,6,8,9}
    Dim w As Integer
    Dim f As String
    Dim q As Date
    Dim q1 As Date
    w =dlg.FileName.LastIndexOf("\")
    f = dlg.FileName.SubString(w+1)
    
    q = f.SubString(7,9)
    
    'For n As Integer = 2 To Sheet.Rows.Count -1
    For n As Integer = 2 To rg.Rows.Count
 
        
        
        q1 =  Sheet.Cells(n,8).Text.SubString(0,9)
        
        If q1 = q Then
            
            
            Dim r As Row = Tables("APS排产导入").AddNew()
            For m As Integer = 0 To nms.Length - 1
                
                r(nms(m)) = Sheet.Cells(n,k(m)).Value
                
                r("导入文件名") = f
                
                r("文件名日期") = q
                
            Next
        End If
    Next
    
    Tables("APS排产导入").ResumeRedraw()
    
    MessageBox.Show("导入完成!")
    
    Tables("APS排产导入").DataTable.Save
    
End If



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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2024/6/27 10:06:00 [显示全部帖子]

图片点击可在新窗口打开查看

用上面代码,现在提示这样的错语,请问是什么原因?


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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2024/6/27 13:31:00 [显示全部帖子]

应用日期范围筛选,这里需要手动构造筛选条件字符串或分步设置筛选条件
Sheet.Range("A1").AutoFilter(Field:=8, Criteria1:=">=" & q.ToString("yyyy-MM-dd"), Operator:=XlAutoFilterOperator.xlAnd, Field:=8, Criteria2:="<=" & q.AddDays(1).ToString("yyyy-MM-dd"))
假如我想用上面这样的代码做筛选条件,但好像不支持,主要是这里的问题:Operator:=XlAutoFilterOperator.xlAnd,提示像编译错误:未声明"xlAnd"。它可能因其保护级别而不可访问。


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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2024/6/27 13:52:00 [显示全部帖子]

按你提示的方法,会提示:编译错误:"Public Function AutoFilter([Field As Object],[Criteria1 AsObject], [operator AsMicrosoft.office.Interop.Excel.xlAutoFilteroperator =XlAutoFilterOperator.xlAnd], [Criteria2 As Object], [VisibleDropDown AsObject]) As Object"的参数 "Field"已有匹配的参数.
错误代码:sheet.Range("A1").AutoFilter(Field:=8, Criteria1:=">="&q.Tostring("yyyy-MM-dd"),Operator:=MSExcel.XlAutoFilterOperator.xlAnd, Field:=8,Criteria2:="<=" & q.AddDays(1).Tostring("yyyy-MM-dd"))

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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2024/6/27 14:25:00 [显示全部帖子]

Sheet.AutoFilterMode = False
    sheet.Range("A1").AutoFilter(8, ">=" & q.ToString("yyyy-MM-dd"), MSExcel.XlAutoFilterOperator.xlAnd, 8, "<=" & q.AddDays(1).ToString("yyyy-MM-dd"))
    Sheet.Range("A1").AutoFilter(Field:=5, Criteria1:="ZQ-03*")

    'For n As Integer = 2 To rg.Rows.Count

    For n As Integer = 2 To Sheet.UsedRange.SpecialCells(xlCellTypeVisible).Rows.Count


会提示错误,请问应该如何处理?

:编译错误:未声明”xlCellTypevisible”。它可能因其保护级别而不可访问
错误代码:Forn As Integer=2ToSheet.UsedRange.specialcells(xlcellTypeVisible).Rows.Count


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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2024/6/27 14:26:00 [显示全部帖子]

这样写也不行:For n As Integer = 2 To Sheet.UsedRange.SpecialCells(MSExcel.xlCellTypeVisible).Rows.Count
图片点击可在新窗口打开查看

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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2024/6/27 14:33:00 [显示全部帖子]

不明白,里面有xlCellTypeVisible这个吗?


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


加好友 发短信
等级:五尾狐 帖子:1033 积分:7258 威望:0 精华:0 注册:2008/9/1 22:34:00
  发帖心情 Post By:2024/6/27 14:43:00 [显示全部帖子]

现在明白了


 回到顶部