Foxtable(狐表)用户栏目专家坐堂 → [求助]Excel导入合并数据代码出错(已解决)!


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

主题:[求助]Excel导入合并数据代码出错(已解决)!

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


加好友 发短信
等级:童狐 帖子:272 积分:2125 威望:0 精华:0 注册:2018/8/13 9:55:00
[求助]Excel导入合并数据代码出错(已解决)!  发帖心情 Post By:2018/11/2 11:25:00 [只看该作者]

各位老师前辈好,请教一个问题,我用了论坛里面的一段excel导入合并数据代码,但是论坛的代码里面有日期列,我的数据表没有日期列,我调用代码的时候总出错,论坛的原代码在这个地址:

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&replyID=713079&ID=104041&skin=1

然后我修改成这样:

Dim dlg As New OpenFileDialog
dlg.Filter = "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog =DialogResult.OK Then
    Dim t As Table = Tables("数据表A")
    't.ResumeRedraw()
    t.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 arg = rg.value
        For n As Integer = 2 To rg.Rows.Count
            Dim r As DataRow = t.DataTable.Find("编号 = '" & arg(n, 7) & "' and 明细编号 = '" & arg(n, 7) & "' and 单据类型 = '" & arg(n, 8) & "'")
            If r Is Nothing Then r = t.DataTable.AddNew()
            For i As Integer = 1 To rg.Columns.count
                Dim cname As String = arg(1,i)
                If cname > "" AndAlso t.Cols.Contains(cname) Then
                    If t.Cols(cname).IsDate AndAlso arg(n,i).Gettype.name = "double" Then
                        r(cname) = DateTime.FromOADate(arg(n,i))
                    Else
                        r(cname) = arg(n, i)
                    End If
                End If
            Next
        Next
    catch ex As exception
        msgbox(ex.message)
        MessageBox.Show("导入失败!","恭喜!")
    finally
        t.ResumeRedraw()
        app.quit
    End try
End If



上面这段代码,导入时,会提示“未将对象引用设置到对象的实例”错误,然后导入失败,最终表会导入第一行的数据,不知道怎么解决,请各位老师前辈指点一下,谢谢了!
[此贴子已经被作者于2018/11/2 17:21:43编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/2 13:01:00 [只看该作者]

excel文件和你的项目,分别发上来测试。

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


加好友 发短信
等级:童狐 帖子:272 积分:2125 威望:0 精华:0 注册:2018/8/13 9:55:00
  发帖心情 Post By:2018/11/2 15:31:00 [只看该作者]

老师,我找到出错的原因了,原因是我的excel表里面有两列日期列,数据类型是datatime,但是导入的时候,一般是留空的,如果删除这两列,或者是这两列都有数据的时候,就不会报错,如何解决这个问题呢,是不是下面这段代码判断的问题:

If cname > "" AndAlso t.Cols.Contains(cname) Then
    If t.Cols(cname).IsDate AndAlso arg(n,i).Gettype.name = "double" Then
        r(cname) = DateTime.FromOADate(arg(n,i))
     Else

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/2 16:25:00 [只看该作者]

excel文件发上来测试。

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


加好友 发短信
等级:童狐 帖子:272 积分:2125 威望:0 精华:0 注册:2018/8/13 9:55:00
  发帖心情 Post By:2018/11/2 16:54:00 [只看该作者]

老师,我做了一个示例,你帮忙看看!

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


加好友 发短信
等级:童狐 帖子:272 积分:2125 威望:0 精华:0 注册:2018/8/13 9:55:00
  发帖心情 Post By:2018/11/2 16:56:00 [只看该作者]

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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:有开始结束日期列导入报错.xls
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:无开始结束时间导入无报错.xls



[此贴子已经被作者于2018/11/2 16:57:36编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/11/2 17:04:00 [只看该作者]

代码改成

 

                    If cname > "" AndAlso t.Cols.Contains(cname) Then
                        If t.Cols(cname).IsDate AndAlso arg(n,i) IsNot Nothing AndAlso arg(n,i).Gettype.name = "double" Then
                            r(cname) = DateTime.FromOADate(arg(n,i))
                        Else
                            r(cname) = arg(n, i)
                        End If
                    End If


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


加好友 发短信
等级:童狐 帖子:272 积分:2125 威望:0 精华:0 注册:2018/8/13 9:55:00
  发帖心情 Post By:2018/11/2 17:14:00 [只看该作者]

可以了,多谢老师!

 回到顶部