以文本方式查看主题 - 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 Dim dr As DataRow = DataTables("名册").Find("身份证号 = \'" & sfz & "\'") [此贴子已经被作者于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 --
|
||||||||
-- 作者:cqlpjks -- 发布时间:2014/4/10 16:13:00 -- 还是没搞懂,条件列sheet(n,5).Text 和导入列sheet(n,8).text 不用列位置获取Excel表中的列,而直接用“列名”获取。 条件列用“身份证号”(固定的)和导入列用“km”(动态的) ,如何修改代码? Dim dlg As New OpenFileDialog Dim dr As DataRow = DataTables("名册").Find("身份证号 = \'" & sfz & "\'") 注:将“测试英语听力第一次考试成绩.xls”文件中的“听力一”列导入到“高中期末成绩统计程序.Table”文件的“名册”中的“听力一”列中,条件是“身份证号”=“km”。sheet(n,5).Text 和 sheet(n,8).text 不能受列位置限制。只能用“身份证号”和“km”列名限制
[此贴子已经被作者于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) End If 显示信息要将导入Excel表中的所有列显示完,我将红色部分代码改为MessageBox.show("导入的是" & km & "吗","提示", MessageBoxButtons.YesNo)就显示:<!--StartFragment --> <!--StartFragment -->
点“是(Y)”后仍然要显示Excel表中列的次数,还是能够导入,但点“否(N)后不终止执行。
我想点“是(Y)”后执行导入(只显1次),并显示“正在导入,请稍后…”(MessageBox.show("正在导入" & km & ",请稍后…")。点“否(N)“后终止执行导入。
怎么修改代码?请指教。谢谢! [此贴子已经被作者于2014-4-11 15:34:08编辑过]
|
||||||||
-- 作者:Bin -- 发布时间:2014/4/11 15:33:00 -- 不是非常理解你的意思 你可以参考帮助 |