以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  文件合并  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=89048)

--  作者:刘林
--  发布时间:2016/8/14 21:18:00
--  文件合并
请问下我的成绩表里有学校代码,单位名称,年级代码,班级,学籍号,考号,姓名。。。,在各学校上报考试信息时将以上7个字段的内容打开个同结构的EXCl文件合并进去,但有个要求是如果考号字段内容已存在就要看其他6个字段内容有没有修改,如有改则用EXCL中新改后的内容覆盖,如不存在则添加,如完全相同的行则跳过。(因为报名时有可能发现错误,修改EXCL内容,还有可能出增加漏报学生,或删除,此时就需重新导入合并)
 研究了些时间不得行,请求帮忙指导,谢谢!

--  作者:狐狸爸爸
--  发布时间:2016/8/15 7:49:00
--  

这个完全可以,参考:

http://www.foxtable.com/webhelp/scr/2334.htm

 

我帮你简化一下逻辑;

已经存在的行,这7列采用excel中的数据,不存在的则增加行。


--  作者:刘林
--  发布时间:2016/8/15 9:51:00
--  
Dim dlg As new OpenFileDialog
dlg.Filter = "Excel|*.xls;*.xlsx"
If dlg.ShowDialog = DialogResult.OK Then
Dim Book As New XLS.Book(dlg.FileName)
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("成绩").StopRedraw()
Dim nms() As String = {"学校代码","单位名称","年级代码","班级","学籍号","考号","姓名"}
For n As Integer = 1 To Sheet.Rows.Count -1 
    Dim bh As String = sheet(n,0).Text 
    Dim dr As DataRow = DataTables("成绩").Find("考号 = \'" & bh & "\'") 
    If dr Is Nothing Then \'如果不存在同考号的行
        dr =  DataTables("成绩").AddNew()
    End If
    For m As Integer = 0 To nms.Length - 1
        dr(nms(m)) = Sheet(n,m).Value
    Next
Next
Tables("成绩").ResumeRedraw()
End If

请问上面代码测试当考号不改,而改姓名时还是要新增加一行呢,而不是按同考号覆盖呢

--  作者:刘林
--  发布时间:2016/8/15 10:00:00
--  
请帮忙一下,谢谢
--  作者:Hyphen
--  发布时间:2016/8/15 10:05:00
--  
考号是Execl表格的第一列吗
--  作者:刘林
--  发布时间:2016/8/15 10:09:00
--  
就是想以EXCL表中最新内容导入,但现在情况是原有的记录仍然新增进去,而不是按考号唯一值对比修改,谢谢
--  作者:Hyphen
--  发布时间:2016/8/15 10:27:00
--  
请回答5楼问题
--  作者:刘林
--  发布时间:2016/8/15 10:30:00
--  
不是,是第六例
--  作者:刘林
--  发布时间:2016/8/15 10:40:00
--  
在您的提示下,我改了这句  
 Dim bh As String = sheet(n,0).Text 
为 Dim bh As String = sheet(n,5).Text 
现在考号不变是不会再增加重复行了,但如果EXCL中把001考号的姓名改了,重新合并进去001考号的姓名不变呢

--  作者:刘林
--  发布时间:2016/8/15 10:43:00
--  
对了,谢谢