以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 文件合并 (http://foxtable.net/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 -- 对了,谢谢 |