Foxtable(狐表)用户栏目专家坐堂 → [求助]EXCEL条件导入时能否直接用列名获取?


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

主题:[求助]EXCEL条件导入时能否直接用列名获取?

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
[求助]EXCEL条件导入时能否直接用列名获取?  发帖心情 Post By:2014/4/10 14:57:00 [只看该作者]

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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2014/4/10 15:30:00 [只看该作者]

我只导入“km”这一列,条件是Dim sfz As String = sheet(n,5).Text  '获取身份证号
                Dim dr As DataRow =  DataTables("名册").Find("身份证号 = '" & sfz & "'")

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By: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
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2014/4/11 10:32:00 [只看该作者]

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

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


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2014/4/11 11:20:00 [只看该作者]

谢谢!再将“dr( km ) = sheet(n,8).text” 改为“dr( km ) = sheet(n,nms(km)).text“ 导入列“km”也实现了用列名获取了。这样就方便了,条件列和导入列在导入表Excel中的位置就不受限制了。

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By: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
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/11 15:33:00 [只看该作者]

不是非常理解你的意思

你可以参考帮助


 回到顶部
总数 16 1 2 下一页