以文本方式查看主题 - 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=91269) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:ming8604 -- 发布时间:2016/10/6 0:03:00 -- [求助]多张excel合并成一张 现在一题作业题。多张excel表合并成一张,表格如下:
合并要求:如果下一张表中,出现同名同选课,以新表数据成绩学分等为准(即覆盖原表中的一列)。 新手无从下手,请老师指点一二。谢谢
[此贴子已经被作者于2016/10/6 0:04:48编辑过]
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:新福星 -- 发布时间:2016/10/6 7:26:00 -- 1 在Excel文件中按先名顺序把所有Sheet合并到一起,并标序顺号; 2 全部加载到FoxTable 一个表中,名为表A; 3 在FoxTable再建一个表名为表B,格式和表A相同; 4 在杂项命令窗口编一段如下程序,执行即可 Dim s As Row For Each a As Row In Tables("表A").Rows r=DataTables("表B").find("姓名=\'" & a("姓名") & "\' And 选课=\'" & a("选课") & "\'") If r Is Nothing Then s=Tables("表B").AddNew s("姓名")=a("姓名") s("选课")=a("选课") s("成绩")=a("成绩") s("学分")=a("学分") s("备注")=a("备注") Else r("成绩")=a("成绩") r("学分")=a("学分") r("备注")=a("备注") End If Next 不知还有什么更简单的方法了
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2016/10/6 9:34:00 -- 参考:http://www.foxtable.com/webhelp/scr/2334.htm Dim dlg As New OpenFileDialog dlg.MultiSelect = True If dlg.ShowDialog = DialogResult.OK Then Tables("订单").StopRedraw() For Each fn As String In dlg.FileNames Dim Book As New XLS.Book(fn) Dim Sheet As XLS.Sheet = Book.Sheets(0) 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 Next Tables("订单").ResumeRedraw() End If |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:大雪山 -- 发布时间:2016/10/6 11:16:00 -- 有点蓝老师: 这个公式 是按编号添加的,Excel表头
这部分没有对应上,这公式麻烦老师能再修改下 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2016/10/6 11:48:00 -- 4楼,没看懂你的意思 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:大雪山 -- 发布时间:2016/10/6 12:02:00 -- Excel表头改成能按 编号 产品 两个字段 相同的添加,也就是向库中同编号 产品增填加数据. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2016/10/6 12:07:00 -- ...... For n As Integer = 1 To Sheet.Rows.Count -1 Dim bh As String = sheet(n,0).Text Dim cp As String = sheet(n,1).Text Dim dr As DataRow = DataTables("订单").Find("编号 = \'" & bh & "\' and 产品=\'" & cp & "\'") 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 ......
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:ming8604 -- 发布时间:2016/10/6 12:48:00 -- 按照你所述,在命令窗口输入: Dim s As Row For Each a As Row In Tables("原表").Rows r=DataTables("新表").find("姓名=\'" & a("姓名") & "\' And 选课=\'" & a("选课") & "\'") If r Is Nothing Then s=Tables("新表").AddNew s("姓名")=a("姓名") s("选课")=a("选课") s("成绩")=a("成绩") s("学分")=a("学分") s("备注")=a("备注") Else r("成绩")=a("成绩") r("学分")=a("学分") r("备注")=a("备注") End If Next 编译错误:“r”是private,因此他在此文上下文中不可访问。 错误代码: r=DataTables("新表").find("姓名=\'" & a("姓名") & "\' And 选课=\'" & a("选课") & "\'") 这个是什么问题??我重启过两次了,依然这个报错。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:ming8604 -- 发布时间:2016/10/6 13:28:00 -- 老师,我只是想学好表单统计,就foxtable当成软件来操作了。 一点开就开发板块,感觉一下子要学的好多了。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
-- 作者:有点蓝 -- 发布时间:2016/10/6 14:20:00 -- 1楼这种情况只能用代码处理。如果没有代码基础,只能是自己在Execl合并数据并过滤重复数据后再导入狐表。 |