Foxtable(狐表)用户栏目专家坐堂 → 从EXL表导入数据为何出错?!


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

主题:从EXL表导入数据为何出错?!

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


加好友 发短信
等级:幼狐 帖子:71 积分:927 威望:0 精华:0 注册:2014/12/8 15:38:00
从EXL表导入数据为何出错?!  发帖心情 Post By:2018/10/16 16:42:00 [只看该作者]

从外部表EXL导入数据(导入代码如下:),为何出现:“索引超出范围。必须为非负值并小于集合大小。” 参数名:index


怎么也查不出原因,其他外表都可以,到底怎么回事?请教老师,谢谢!

代码:
图片点击可在新窗口打开查看此主题相关图片如下:出错截图.jpg
图片点击可在新窗口打开查看

For Each file As String In filesys .GetFiles("D:\百度云同步盘\丽水\数据\市公司财务") '获取该目录下的所有文件集
    If file.EndsWith(".xls") OrElse file.EndsWith(".xlsx") Then
        Dim Book As New XLS.Book(file)
        Dim Sheet As XLS.Sheet = Book.Sheets("全市储蓄分钟类表") '打开"储蓄"工作表
        ' Tables("网点分储种余额").StopRedraw()
        ' Dim nms() As String = {"日期","机构代码","县","网点简称","合计","活期","通知存款","定活两便","定期","其中大额存单"}
        Dim rq1 As String = sheet(3,9).text
        Dim rq_y As String = left(rq1.trim(" "),4)
        Dim rq_m As Integer =iif(rq1.length <= 7,rq1.SubString(5,1),rq1.SubString(5,2))
        Dim Days As Integer = Date.DaysInMonth(rq_y,rq_m) '取该月天数
        Dim rq As Date = New Date(rq_y,rq_m,Days) '取该月日期
        MessageBox.show("年=[ " & rq_y & "] 月=[" & rq_m & "] 地市名称=[ & dw_s & ]  类别= [ & LB & ],!","警告!",messageboxbuttons.ok)
        Return
        Dim dw As String = sheet(3,0).Text '取市级[单位名称]栏数据
        Dim dw_s As String = dw.substring(5,3) '选取市级名称 'iif(right(dw.trim(""),2) = "汇总",left(dw,2),"  ") '判断是否汇总栏?
        Dim LB As String =dw.Substring(15,2)  '选取代理 还是 自营
        
        'dw=iif(right(dw,2) = "汇总","汇总",left(dw,1)+right(dw,1)) 'trim(" ")  '去掉空格
        If IsDate(rq) Then  '确定表达式expression能否转换成日期格式. len(rq1.trim(" ")) = 10 And
        Else
            MessageBox.show("日期[" & rq & "]格式错误,请在3行9列按[YYYY-MM-DD]重输!","警告!",messageboxbuttons.ok)
            Return
        End If
        Dim js As Integer = 1
        For n As Integer = 6 To Sheet.Rows.Count -1
            
            dw = sheet(n,0).Text '取[单位名称]栏数据
            dw = dw.trim(" ")
            dw=iif(left(dw,2) = "丽水","市本级",iif(left(dw,2) = "景宁",left(dw,7),left(dw,3))) 
            Dim dr As DataRow = DataTables("全市分储种余额").Find("日期 = " & rq & "  And 市 = '" & dw_s & "' and 县 = '" & dw & "'")
            If ( dr Is Nothing Or dr IsNot Nothing ) And dw <> "" Then '如果不存在同日期与机构代码的,将增加数据(自动过滤机构代码为空的行数)
                If dr Is Nothing Then
                    dr =  DataTables("全市分储种余额").AddNew()
                    dr("日期") = rq
                    dr("市") = dw_s
                    dr("县") = dw
                    dr("板块") = LB 'iif(e.Form.Controls("RadioButton1").Checked  = True,"代理","自营") 'RadioButton1
                End If

                If ( n > =10 And n <= 18) Then
                    dr("存款余额") = sheet(n,1).text '期末余额
                    dr("活期余额") = sheet(n,2).text '活期
                    dr("定活两便") = sheet(n,5).text '定活两便
                    dr("个人通知存款") = sheet(n,7).text '个人通知
                    dr("DQ00") = sheet(n,9).text '定期余额
                    dr("DQ0301") = sheet(n,18).text '三个月不含协议
                    dr("DQ0302") = sheet(n,20).text '三个月协议
                    dr("DQ0601") = sheet(n,28).text '六个月不含协议
                    dr("DQ0602") = sheet(n,30).text '六个月协议
                    dr("DQ1201") = sheet(n+15,3).text '一年不含协议
                    dr("DQ1202") = sheet(n+15,5).text '一年协议
                    dr("DQ2401") = sheet(n+15,17).text '二年不含协议
                    dr("DQ2402") = sheet(n+15,19).text '二年协议
                    dr("DQ3601") = sheet(n+15,27).text '三年不含协议
                    dr("DQ3602") = sheet(n+15,29).text '三年协议
                    dr("DQ6001") = sheet(n+15,37).text '五年不含协议
                    dr("DQ6002") = sheet(n+15,39).text '五年协议
                    
                End If
                application.Doevents '即刻暂停代码的执行,重新绘制控件后,继续执行代码.
            End If
        Next
    End If
    Output.Show(File)
Next
'End If
Tables("全市分储种余额").ResumeRedraw()
DataTables("全市分储种余额").save

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


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

应该是你的【substring】有问题,比如只有 3个字符,但你获取了第4个位置的字符。

 

比如,下面的代码,两个substring都是要计算的,如果你rq1的长度小于7,就会报错。

 

Dim rq_m As Integer =iif(rq1.length <= 7,rq1.SubString(5,1),rq1.SubString(5,2))


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


加好友 发短信
等级:幼狐 帖子:71 积分:927 威望:0 精华:0 注册:2014/12/8 15:38:00
  发帖心情 Post By:2018/10/16 18:32:00 [只看该作者]

好象不是这个原因,我用messagebox函数放置(Dim rq_m As Integer =iif(rq1.length <= 7,rq1.SubString(5,1),rq1.SubString(5,2)))前进行该测试,还没执行到messagebox语句就报错了,出错代码还是如上啊!!好象进行到第二语句
    If file.EndsWith(".xls") OrElse file.EndsWith(".xlsx") Then 就出现该出错提示了?

我应该怎么做?谢谢老师!


以下为测试语句:
        MessageBox.show("年=[ " & rq_y & "] 月=[" & rq_m & "] 地市名称=[ & dw_s & ]  类别= [ & LB & ],!","警告!",messageboxbuttons.ok)

[此贴子已经被作者于2018/10/16 18:37:25编辑过]

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


加好友 发短信
等级:幼狐 帖子:71 积分:927 威望:0 精华:0 注册:2014/12/8 15:38:00
  发帖心情 Post By:2018/10/16 18:44:00 [只看该作者]

我精减了下整体语句(如下:),结果运行还是出错同样的出错!不知何故?!请老师指教!!谢谢

For Each file As String In filesys .GetFiles("D:\百度云同步盘\丽水\数据\市公司财务") '获取该目录下的所有文件集
    If file.EndsWith(".xls") OrElse file.EndsWith(".xlsx") Then
        Dim Book As New XLS.Book(file)
        'Dim Sheet As XLS.Sheet = Book.Sheets("Sheet1") 
        Dim Sheet As XLS.Sheet = Book.Sheets("全市储蓄分钟类表")
        Dim dw As String = sheet(3,0).Text '取市级[单位名称]栏数据
        MessageBox.show("年=[  & rq1 & ] 月=[ & rq_m & ] 地市名称=[" & dw & "]  类别= [ & LB & ],!","警告!",messageboxbuttons.ok)
'        Return
   End If
    Output.Show(File)
Next
[此贴子已经被作者于2018/10/16 18:47:58编辑过]

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


加好友 发短信
等级:幼狐 帖子:71 积分:927 威望:0 精华:0 注册:2014/12/8 15:38:00
  发帖心情 Post By:2018/10/16 18:49:00 [只看该作者]

我放在命令窗口测试上述代码仍出错:

出错截图:

图片点击可在新窗口打开查看此主题相关图片如下:出错截图.jpg
图片点击可在新窗口打开查看


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


加好友 发短信
等级:幼狐 帖子:71 积分:927 威望:0 精华:0 注册:2014/12/8 15:38:00
  发帖心情 Post By:2018/10/16 19:19:00 [只看该作者]

无法在 System.DateTime 和 System.Int32 上执行“=”操作

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:105495 积分:536466 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/10/16 20:34:00 [只看该作者]

回3楼:这种代码肯定有问题,不过要循环到有问题的数据才会出错

……
if rq1.length < 6 orelse rq1.length > 7 then continue for
Dim rq_m As Integer =iif(rq1.length <= 7,rq1.SubString(5,1),rq1.SubString(5,2))

回4楼:不是所有的文件都有“全市储蓄分钟类表”这个sheet名称吧,如果没有就会出错


 回到顶部