以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  导入  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=96777)

--  作者:刘林
--  发布时间:2017/2/27 20:22:00
--  导入
Dim dwmc As String = user.group
Dim oDocument2 As object = axWebBrowser2.Gettype().InvokeMember("Document", System.Reflection.BindingFlags.GetProperty, Nothing, axWebBrowser2, Nothing)
Dim oApplication2 As object = axWebBrowser2.Gettype().InvokeMember("Application", System.Reflection.BindingFlags.GetProperty, Nothing, oDocument2, Nothing)
oDocument2.save
Dim Book As New XLS.Book(e.Form.Controls("label1").text)
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Dim bj1 As Integer
Dim xm1 As Integer
Dim bsm1 As Integer
Dim csrq As Integer
For i As Integer = 0 To sheet.Cols.count -1
    If sheet(0,i).value = "班级"
        bj1 =i
    End If
    If sheet(0,i).value = "学生姓名"
        xm1 = i
    End If
    If sheet(0,i).value = "学校标识码"
        bsm1 = i
    End If
    If sheet(0,i).value ="出生日期"
        csrq = i
    End If
Next
Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
p.Maximum = sheet.Rows.count -1 \'设置最大值
p.Minimum = 0 \'设置最小值
p.Value = 0 \'设置当前值
Tables("学生信息").StopRedraw()
For n As Integer = 1 To Sheet.Rows.Count -1
    p.Value = n \'设置当前
    Dim bj As String = sheet(n,bj1).value.replace(" ","").replace(chr(9),"")
    Dim xm As String = sheet(n,xm1).value.replace(" ","").replace(chr(9),"")
    Dim bsm As String = sheet(n,bsm1).value.replace(" ","").replace(chr(9),"")
    Dim dr As DataRow = DataTables("学生信息").sqlFind("班级 = \'" & bj & "\'and 学校标识码 = \'" & bsm & "\' And 学生姓名 = \'" & xm & "\'")
    If dr Is Nothing Then \'如果不存在同考号的行
        dr =  DataTables("学生信息").AddNew()
    End If
    For m As Integer = 0 To sheet.Cols.count -1
        If m = csrq
            dr(sheet(0,m).value) = Nothing
        End If
            dr(sheet(0,m).value) = Sheet(n,m).Value.replace(" ","").replace(chr(9),"")
            dr("状态") = "在读:原籍在读"
        End If
    Next
Next
e.Form.close
Tables("学生信息").ResumeRedraw()
For Each r As Row In Tables("学生信息").Rows
    For Each c As Col In Tables("学生信息").Cols
        If r.IsNull(c.Name) =  False AndAlso c.IsString Then
            r(c.Name) = r(c.Name).replace(" ","")
            r(c.Name) = r(c.Name).replace(chr(9),"")
        End If
    Next
Next
DataTables("学生信息").DataCols("身份证件号").RaiseDataColChanged()
DataTables("学生信息").save()
Dim schoolName As String = user.group
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.c
cmd.CommandText = "SEL  ECT DISTINCT 学校名称, 年级, 班级  From {学生信息} where 学校名称 = \'" & schoolName & "\'"
dt = cmd.ExecuteReader()
Dim trv As WinForm.TreeView = Forms("学生信息").Controls("TreeView1")
trv.BuildTree(dt,"学校名称|年级|班级")



老师,请问上面代码在导放EXCL表格时,EXCL的第一列导进去是空的,没找到原因,请指点, 另外这个代码效率不高,请帮改进下,谢谢

--  作者:有点蓝
--  发布时间:2017/2/27 21:00:00
--  
上传Execl测试
--  作者:刘林
--  发布时间:2017/2/27 21:29:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:book1.xlsx


现在的问题是出生日期可能有,也有可能没有,我发现当表中没有出生日期列时,就会出现表中第一列的字段导进去是空的,我的想法是这个学籍表是从国网上导出来的,因为各校导出的列有所不同,且顺序也不一样,加之导出来的出生日期列是字符列(并不规范,有些是空的,转换也不行),我不想用户再去改,出生日期在表类型是日期列,且由身份证号生成,所以如果用户在国网上导出时没导出生日期列还好,如果导出了日期列该如何处理更好?

--  作者:有点蓝
--  发布时间:2017/2/27 21:55:00
--  
定义的时候给个初始值

Dim csrq As Integer = -1

--  作者:刘林
--  发布时间:2017/2/27 22:41:00
--  

对了, 老师,谢谢了,上面代码如何能更加优化,效率更高一点,感觉不是很快


--  作者:有点蓝
--  发布时间:2017/2/27 22:57:00
--  
可以考虑使用vba导入:http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=65686&skin=0