以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  【求助】 excel 时间列 导入到窗口表格式该如何处理  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=147771)

--  作者:chen_sheng
--  发布时间:2020/3/23 20:04:00
--  【求助】 excel 时间列 导入到窗口表格式该如何处理
请教
 excel 时间列 导入到窗口表格式该如何处理  目前excel 时间列 设置为1902/10/18 10:22:00 格式导入显示00:00

图片点击可在新窗口打开查看此主题相关图片如下:导入时间格式.png
图片点击可在新窗口打开查看

导入代码如下 导入数据除时间列 均正常
    Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
    dlg.Filter= "Excel文件|*.xls|Excel2007文件|*.xlsx" \'设置筛选器
    If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
        
        Dim Book As New XLS.Book(dlg.FileName)
        \'Dim Book As New XLS.Book("d:\\data\\1.xls")
        
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("制度标准二级_Table1").StopRedraw()
        Forms("加载窗口").Show
        \'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"频率","完成日期","备注"}
        \'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        For n As Integer = 1 To Sheet.Rows.Count -1
            Dim r As Row = Tables("制度标准二级_Table1").AddNew()
            For m As Integer = 0 To nms.Length - 1
                r(nms(m)) = Sheet(n,m).Value
            Next
        Next
        Tables("制度标准二级_Table1").ResumeRedraw()
        Tables("制度标准二级_Table1").Save
end if
[此贴子已经被作者于2020/3/23 20:17:09编辑过]

--  作者:chen_sheng
--  发布时间:2020/3/23 20:17:00
--  
目前excel 时间列 设置为1902/10/18 10:22:00 格式导入显示00:00
--  作者:chen_sheng
--  发布时间:2020/3/23 20:24:00
--  
避免沉贴 顶下
--  作者:有点蓝
--  发布时间:2020/3/23 20:44:00
--  
"备注"列就是这个完成时间列?什么列类型?有没有相关代码控制
--  作者:chen_sheng
--  发布时间:2020/3/24 13:04:00
--  
时间列是  【完成时间】

窗口打开代码 
DataTables(e.Form.Name & "_table1").DataCols("完成时间").SetDateTimeFormat(DateTimeFormatEnum.Time)

导入代码
导入代码如下 导入数据除时间列 均正常
    Dim dlg As New OpenFileDialog \'定义一个新的OpenFileDialog
    dlg.Filter= "Excel文件|*.xls|Excel2007文件|*.xlsx" \'设置筛选器
    If dlg.ShowDialog = DialogResult.Ok Then \'如果用户单击了确定按钮
        
        Dim Book As New XLS.Book(dlg.FileName)
        \'Dim Book As New XLS.Book("d:\\data\\1.xls")
        
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("制度标准二级_Table1").StopRedraw()
        Forms("加载窗口").Show
        \'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"频率","完成日期","完成时间","备注"} \'代码省略了些导入列 具体参考附件
        \'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        For n As Integer = 1 To Sheet.Rows.Count -1
            Dim r As Row = Tables("制度标准二级_Table1").AddNew()
            For m As Integer = 0 To nms.Length - 1
                r(nms(m)) = Sheet(n,m).Value
            Next
        Next
        Tables("制度标准二级_Table1").ResumeRedraw()
        Tables("制度标准二级_Table1").Save
end if

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:制度导入格式.xls


附件除【完成时间】列导入数据有问题 其他均无问题   数据库 SQL 数据类型 datetime
[此贴子已经被作者于2020/3/24 13:09:34编辑过]

--  作者:有点蓝
--  发布时间:2020/3/24 14:09:00
--  
要使用vba处理,参考:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=65686&skin=0
--  作者:chen_sheng
--  发布时间:2020/3/24 14:57:00
--  
请教代码
   如何像这样   指定导入指定列呢  现在改了代码  有些列是没有必要导入的  导入会导致报错
        \'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"频率","完成日期","完成时间","备注"} \'代码省略了些导入列 具体参考附件
     
这下面是根据情况改写的导入代码  麻烦指导一下

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("制度标准二级_Table1").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
            Dim ary = rg.value
            For n As Integer = 2 To rg.Rows.Count
                Dim ro As Row = Tables("制度标准二级_Table1").AddNew
                For i As Integer = 0 To Tables("制度标准二级_Table1").Cols.Count - 1
                    ro(i) = ary(n,i+2)
                Next
            Next
            MessageBox.Show("导入成功!","恭喜!")
        catch ex As exception
            msgbox(ex.message)
            MessageBox.Show("导入失败!","请再试一遍!")
        finally
            DataTables("制度标准二级_Table1").ResumeRedraw
            app.quit
        End try
        
    Else
        Return
    End If
End If

--  作者:有点蓝
--  发布时间:2020/3/24 15:36:00
--  
Dim nms() As String = {"","频率","","完成日期","完成时间","备注"} 按顺序把不需要导入的列名置空,然后在代码里判断

            For n As Integer = 2 To rg.Rows.Count
                Dim ro As Row = Tables("制度标准二级_Table1").AddNew
                For i As Integer = 0 To nms.Length - 1
if nms(m) > ""
                    ro(nms(m)) = ary(n,i+2)
end if
                Next


--  作者:chen_sheng
--  发布时间:2020/3/24 17:16:00
--  
问题1
.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.3.11.8
错误所在事件:
详细错误信息:
无法设置列“稽核频率”。此值违反了此列的 MaxLength 限制。

问题二  索引超出了数组界限
[此贴子已经被作者于2020/3/24 17:21:01编辑过]

--  作者:有点蓝
--  发布时间:2020/3/24 17:25:00
--  
1、列长度不够:http://www.foxtable.com/webhelp/topics/0036.htm

2、说明列顺序、数组顺序和execl里的列名顺序不一致,或者个数不对