Foxtable(狐表)用户栏目专家坐堂 → [求助]导入excel某些列出错。


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

主题:[求助]导入excel某些列出错。

帅哥哟,离线,有人找我吗?
大红袍
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/9 15:51:00 [只看该作者]

Dim App As New MSExcel.Application
try
    Dim Wb As MSExcel.Workbook = App.WorkBooks.Open("D:\计划.xls")
    Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
   
    Tables("计划表").StopRedraw()
    '注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
    Dim ra = ws.UsedRange
    Dim nms() As String = {"生产订单号码","工单行号","物料编码","物料名称","类别说明","部门名称","开工日期","完工日期","生产订单数量","入库数量","完成数量","产品批次","工单状态","订单号","订单行号","客户","备注","软件版本","料况追踪","基板","周需求交期","合同约定交期","生产反馈","修改标记"}
    '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
    For n As Integer = 2 To ra.Rows.Count
        Dim scddhm As String = ws.cells(n,2).Text
        Dim gdhh As String = ws.cells(n,3).text
       
        If DataTables("计划表").Find("生产订单号码 = '" & scddhm & "' and 工单行号 = '" & gdhh & "'") Is Nothing Then '如果不存在同编号的计划表
            Dim r As Row = Tables("计划表").AddNew()
            For m As Integer = 0 To nms.Length - 1
                r(nms(m)) = ws.cells(n,m+2).Value
            Next
        End If
    Next
    Tables("计划表").ResumeRedraw()
    Tables("计划表").save
    msgbox("导入完成")
catch ex as exception
    msgbox(ex.message)
    app.quit
end try

 

如果觉得慢,就用二维数组 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=28089&skin=0

 

 

 


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


加好友 发短信
等级:五尾狐 帖子:1165 积分:8129 威望:0 精华:0 注册:2015/3/30 10:44:00
  发帖心情 Post By:2016/5/9 16:51:00 [只看该作者]

我需要确认一下。定义的这个数组nms。
1.里面的元素是不是要和excel列名完全一致,不能多,也不能少?
    Dim nms() As String = {"生产订单号码","工单行号","工单","物料编码","物料名称","类别说明","部门名称","开工日期","完工日期","生产订单数量","入库数量","完成数量","产品批次","工单状态","订单号","订单行号","客户","备注","软件版本","料况追踪","基板","周需求交期","合同约定交期","生产反馈","修改标记"}
    '注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
    For n As Integer = 2 To ra.Rows.Count------2.不应该从变量1开始吗?怎么是2开始?
        Dim scddhm As String = ws.cells(n,2).Text
        Dim gdhh As String = ws.cells(n,3).text
        
        If DataTables("计划表").Find("生产订单号码 = '" & scddhm & "' and 工单行号 = '" & gdhh & "'") Is Nothing Then '如果不存在同编号的计划表
            Dim r As Row = Tables("计划表").AddNew()
            For m As Integer = 0 To nms.Length - 1
                r(nms(m)) = ws.cells(n,m+2).Value
            Next
        End If
    Next
3.如果execl的日期列是1-7.在ft里面怎么处理?作为string能行吗?

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/9 16:54:00 [只看该作者]

1、列名尽量要一致,前后可以少,中间不能

 

2、vba的行数、列数,从1开始。

 

3、那你就用字符列,不要用日期列。

 

 

 

 


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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/5/9 16:56:00 [只看该作者]

通用的导入,可以参考这个例子

 

 下载信息  [文件大小:31.3 KB  下载次数:7]
图片点击可在新窗口打开查看点击浏览该文件:导入excel文件.zip


 回到顶部
总数 14 上一页 1 2