以文本方式查看主题

-  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=49004)

--  作者:cqlpjks
--  发布时间:2014/4/10 14:57:00
--  [求助]EXCEL条件导入时能否直接用列名获取?

Excel条件导入时是用列位置获取的条件列和导入列,我想直接用列名获取条件列和导入列,如何修改代码?请指教。谢谢!

Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
dlg.Filter= "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog = DialogResult.OK Then
    For Each km As String In DataTables("校名设置").GetUniqueValues("单位 = \'统计\'", "部别")
        For Each fl As String In dlg.FileNames
            Dim Book As New xls.Book(fl)
            Dim Sheet As XLS.Sheet = Book.Sheets(0)
            For n As Integer = 1 To Sheet.Rows.Count -1
                Dim sfz As String = sheet(n,5).Text  \'获取条件列(身份证号)

                Dim dr As DataRow =  DataTables("名册").Find("身份证号 = \'" & sfz & "\'")
                If dr IsNot Nothing
                    dr( km ) = sheet(n,8).text \'获取导入列
                End If
            Next
        Next
        e.Form.Controls("Label11").Text = "英语" & km & "成绩已经合并,可以进行分项统计!"
    Next
End If

[此贴子已经被作者于2014-4-10 15:09:30编辑过]

--  作者:Bin
--  发布时间:2014/4/10 15:14:00
--  
Dim nms As new Dictionar (of String,Integer)

For i As Integer = 0 To Sheet.Cols.Count -1 
    If Sheet(i,0).Value <> "" Then
       nms.add(Sheet(i,0).Value,i)
    End If
Next



--  作者:cqlpjks
--  发布时间:2014/4/10 15:30:00
--  
我只导入“km”这一列,条件是Dim sfz As String = sheet(n,5).Text  \'获取身份证号
                Dim dr As DataRow =  DataTables("名册").Find("身份证号 = \'" & sfz & "\'")

--  作者:Bin
--  发布时间:2014/4/10 15:33:00
--  
Dim nms As new Dictionar (of String,Integer)

For i As Integer = 0 To Sheet.Cols.Count -1 
    If Sheet(i,0).Value <> "" Then
       nms.add(Sheet(i,0).Value,i)
    End If
Next

Dim sfz As String = sheet(nms("km"),5).Text 

--  作者:cqlpjks
--  发布时间:2014/4/10 16:13:00
--  

还是没搞懂,条件列sheet(n,5).Text  和导入列sheet(n,8).text 不用列位置获取Excel表中的列,而直接用“列名”获取。             条件列用“身份证号”(固定的)和导入列用“km”(动态的) ,如何修改代码?

Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
dlg.Filter= "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog = DialogResult.OK Then
    For Each km As String In DataTables("校名设置").GetValues("部别","单位 = \'统计\'" )
        For Each fl As String In dlg.FileNames
            Dim Book As New xls.Book(fl)
            Dim Sheet As XLS.Sheet = Book.Sheets(0)
            For n As Integer = 1 To Sheet.Rows.Count -1
                Dim sfz As String = sheet(n,5).Text  \'获取条件列(身份证号)(只能在第5列,不能变动)

                Dim dr As DataRow =  DataTables("名册").Find("身份证号 = \'" & sfz & "\'")
                If dr IsNot Nothing
                    dr( km ) = sheet(n,8).text \'获取导入列(只能在第8列,不能变动)
                End If
            Next
        Next
        e.Form.Controls("Label11").Text = "英语" & km & "成绩已经合并,可以进行分项统计!"
    Next
End If

注:将“测试英语听力第一次考试成绩.xls”文件中的“听力一”列导入到“高中期末成绩统计程序.Table”文件的“名册”中的“听力一”列中,条件是“身份证号”=“km”。sheet(n,5).Text  和 sheet(n,8).text 不能受列位置限制。只能用“身份证号”和“km”列名限制

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试英语听力第一次考试成绩.xls

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:高中期末成绩统计程序.rar

[此贴子已经被作者于2014-4-11 9:58:17编辑过]

--  作者:cqlpjks
--  发布时间:2014/4/11 10:32:00
--  

版主:我的这个想法能否解决?请指教。谢谢!

因为导入列“听力一”(km)必须在Excel表中的第“8”列即“I”列、条件列“身份证号”必须在Excel表中的第“5”列即“F”列才能正确导入,如果导入表Excel中的列位置变化了,就必须修改代码中的列位置“8”和“5”或调整导入列“听力一”(km)和条件列“身份证号”在Excel表中的列位置,这样不太方便。我就想直接用列名来代替“(n,8)”和“(n,5)”。不知能否实现,请指教。谢谢!


--  作者:Bin
--  发布时间:2014/4/11 10:43:00
--  
Dim dlg As New OpenFileDialog
dlg.MultiSelect = True
dlg.Filter= "Excel文件|*.xls;*.xlsx"
If dlg.ShowDialog = DialogResult.OK Then
    For Each km As String In DataTables("校名设置").GetUniqueValues("单位 = \'统计\'", "部别")
        For Each fl As String In dlg.FileNames
            Dim Book As New xls.Book(fl)
            Dim Sheet As XLS.Sheet = Book.Sheets(0)
            Dim nms As new Dictionary (of String,Integer)
            
            For i As Integer = 0 To Sheet.Cols.Count -1
                If Sheet(0,i).Value <> "" Then
                    nms.add(Sheet(0,i).Value,i)
                    MessageBox.show(Sheet(0,i).Value)
                End If
            Next
            
            For n As Integer = 1 To Sheet.Rows.Count -1
                Dim sfz As String = sheet(n,nms("身份证号")).Text  \'获取身份证号
                Dim dr As DataRow =  DataTables("名册").Find("身份证号 = \'" & sfz & "\'")
                If dr IsNot Nothing
                    dr( km ) = sheet(n,8).text
                End If
            Next
        Next
        e.Form.Controls("Label11").Text = "英语" & km & "成绩已经合并,可以进行下一步!"
    Next
End If

--  作者:cqlpjks
--  发布时间:2014/4/11 11:20:00
--  
谢谢!再将“dr( km ) = sheet(n,8).text” 改为“dr( km ) = sheet(n,nms(km)).text“ 导入列“km”也实现了用列名获取了。这样就方便了,条件列和导入列在导入表Excel中的位置就不受限制了。
--  作者:cqlpjks
--  发布时间:2014/4/11 15:31:00
--  

完美信息显示

Dim nms As new Dictionary (of String,Integer)
For i As Integer = 0 To Sheet.Cols.Count -1
    If Sheet(0,i).Value <> "" Then
        nms.add(Sheet(0,i).Value,i)
        MessageBox.show(Sheet(0,i).Value) \'信息显示       

    End If
Next

显示信息要将导入Excel表中的所有列显示完,我将红色部分代码改为MessageBox.show("导入的是" & km & "吗","提示", MessageBoxButtons.YesNo)就显示:<!--StartFragment -->

<!--StartFragment -->
 
此主题相关图片如下:qq图片20140411153133.jpg
按此在新窗口浏览图片
点“是(Y)”后仍然要显示Excel表中列的次数,还是能够导入,但点“否(N)后不终止执行。
我想点“是(Y)”后执行导入(只显1次),并显示“正在导入,请稍后…”(MessageBox.show("正在导入" & km & ",请稍后…")。点“否(N)“后终止执行导入。
怎么修改代码?请指教。谢谢!
[此贴子已经被作者于2014-4-11 15:34:08编辑过]

--  作者:Bin
--  发布时间:2014/4/11 15:33:00
--  
不是非常理解你的意思

你可以参考帮助