以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]怎样把多个excel台账进行汇总 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=150600) |
||||||||||||
-- 作者:qjm107 -- 发布时间:2020/6/2 22:39:00 -- [求助]怎样把多个excel台账进行汇总
各位专家们 大家好,我现在想请教一个问题,在我上传的附件中,有多个excel,其中的两个分别是“博世通档案移交台账”和“水寨档案移交台账”,我现在想把所有的excel台账都汇总到“台账汇总.foxtable”中的表“台账汇总”里。其中,foxtable中“部门”这一列就是每个excel的第1行第1列的“XX服务站”的这几个汉字提取之后的值,foxtable中“号牌号码”等其他列就是把所有excel表格中的对应号牌号码、号牌种类、办结日期等相对行和列保持不变地
复制粘贴过去。我试着写出的代码如下,但预想结果出不来,请问需怎么修改代码 For Each file As String In filesys .GetFiles("f:\\档案移交台账汇总") If file.EndsWith(".xls") OrElse file.EndsWith(".xlsx") Then Dim Book As New XLS.Book(file) Dim Sheet As XLS.Sheet = Book.Sheets(0) Dim dr As DataRow = DataTables("台账汇总").AddNew dr("业务类型") = sheet(0 To Sheet.Rows.Count -1,1).Text dr("号牌种类") = sheet(0 To Sheet.Rows.Count -1,2).Text dr("号牌号码") = sheet(0 To Sheet.Rows.Count -1,3).Text dr("档案编号") = sheet(0 To Sheet.Rows.Count -1,4).Text dr("办结日期") = sheet(0 To Sheet.Rows.Count -1,5).Text Else dr("部门") =sheet(0 ,0)Substring(0,0,1,6).Text End If Next |
||||||||||||
-- 作者:有点蓝 -- 发布时间:2020/6/2 23:15:00 -- Dim dr As DataRow For Each file As String In filesys .GetFiles("f:\\档案移交台账汇总") If file.EndsWith(".xls") OrElse file.EndsWith(".xlsx") Then Dim Book As New XLS.Book(file) Dim Sheet As XLS.Sheet = Book.Sheets(0) Dim bm As String = sheet(0 ,0).text.SubString(0,6) For i As Integer = 4 To Sheet.Rows.Count -1 If sheet(i,1).Text.trim() > "" dr = DataTables("台账汇总").AddNew dr("部门") = bm dr("业务类型") = sheet(i,1).Text dr("号牌种类") = sheet(i,2).Text dr("号牌号码") = sheet(i,3).Text dr("档案编号") = sheet(i,4).Text dr("办结日期") = sheet(i,5).Text End If Next End If Next
|
||||||||||||
-- 作者:qjm107 -- 发布时间:2020/6/4 22:20:00 --
谢谢你,有点蓝,这次预期结果能出来了。不过,今天我又有一个新问题要请教了。在今天我上传的附件中,有多个excel,其中的两个分别是“博世通档案移交台账”和“水寨档案移交台账”,我现在想把所有的excel台账都汇总到“台账汇总.foxtable”中的表“台账汇总”里。不同的是,不光是从excel的B列到F列的数据需要对应的提取到“台账汇总.foxtable”中,还有从H列到L列的数据需要对应的提取到“台账汇总.foxtable”中,即,excel中的数据是左右并列的,像这种情况又怎样一次性把各种车辆各辆车的相关数据对应的提取到狐表中呢?在我上传的附件foxtable中,1--8行是给出的示例结果。我试着写出的代码如下,但预想结果出不来,请问需怎么修改代码 Dim dr As DataRow For Each file As String In filesys .GetFiles("f:\\档案移交台账汇总") If file.EndsWith(".xls") OrElse file.EndsWith(".xlsx") Then Dim Book As New XLS.Book(file) Dim Sheet As XLS.Sheet = Book.Sheets(0) Dim bm As String = sheet(0 ,0).text.SubString(0,6) For i As Integer = 4 To Sheet.Rows.Count -1 If sheet(i,1).Text.trim() > "" dr = DataTables("台账汇总").AddNew dr("部门") = bm dr("业务类型") = sheet(i,1).Text And dr("业务类型") = sheet(i,7).Text dr("号牌种类") = sheet(i,2).Text And dr("号牌种类") = sheet(i,8).Text dr("号牌号码") = sheet(i,3).Text And dr("号牌号码") = sheet(i,9).Text dr("档案编号") = sheet(i,4).Text And dr("档案编号") = sheet(i,10).Text dr("办结日期") = sheet(i,5).Text And dr("办结日期") = sheet(i,11).Text End If Next End If Next
|
||||||||||||
-- 作者:有点蓝 -- 发布时间:2020/6/4 22:38:00 -- For i As Integer = 4 To Sheet.Rows.Count -1 If sheet(i,1).Text.trim() > "" dr = DataTables("台账汇总").AddNew dr("部门") = bm dr("业务类型") = sheet(i,1).Text dr("号牌种类") = sheet(i,2).Text dr("号牌号码") = sheet(i,3).Text dr("档案编号") = sheet(i,4).Text dr("办结日期") = sheet(i,5).Text dr = DataTables("台账汇总").AddNew dr("部门") = bm dr("业务类型") = sheet(i,7).Text dr("号牌种类") = sheet(i,8).Text dr("号牌号码") = sheet(i,9).Text dr("档案编号") = sheet(i,10).Text dr("办结日期") = sheet(i,11).Text End If Next
|
||||||||||||
-- 作者:qjm107 -- 发布时间:2020/6/7 19:32:00 -- 谢谢你,有点蓝,这次预期结果能出来了。但是,我想问一下,在你提示的代码中,两个事件的两段是空1行 dr("办结日期") = sheet(i,5).Text
dr = DataTables("台账汇总").AddNew 为什么不用Else或Case0、Case1去连接,如 For i As Integer = 4 To Sheet.Rows.Count -1 If sheet(i,1).Text.trim() > "" dr = DataTables("台账汇总").AddNew dr("部门") = bm dr("业务类型") = sheet(i,1).Text dr("号牌种类") = sheet(i,2).Text dr("号牌号码") = sheet(i,3).Text dr("档案编号") = sheet(i,4).Text dr("办结日期") = sheet(i,5).Text Else dr = DataTables("台账汇总").AddNew dr("部门") = bm dr("业务类型") = sheet(i,7).Text dr("号牌种类") = sheet(i,8).Text dr("号牌号码") = sheet(i,9).Text dr("档案编号") = sheet(i,10).Text dr("办结日期") = sheet(i,11).Text End If Next |
||||||||||||
-- 作者:qjm107 -- 发布时间:2020/6/7 19:32:00 -- 或 For i As Integer = 4 To Sheet.Rows.Count -1 If sheet(i,1).Text.trim() > "" Case0 dr = DataTables("台账汇总").AddNew dr("部门") = bm dr("业务类型") = sheet(i,1).Text dr("号牌种类") = sheet(i,2).Text dr("号牌号码") = sheet(i,3).Text dr("档案编号") = sheet(i,4).Text dr("办结日期") = sheet(i,5).Text Case1 dr = DataTables("台账汇总").AddNew dr("部门") = bm dr("业务类型") = sheet(i,7).Text dr("号牌种类") = sheet(i,8).Text dr("号牌号码") = sheet(i,9).Text dr("档案编号") = sheet(i,10).Text dr("办结日期") = sheet(i,11).Text End If Next 这两种写法为什么不行呢? |
||||||||||||
-- 作者:有点蓝 -- 发布时间:2020/6/7 22:33:00 -- 基础问题:http://www.foxtable.com/webhelp/topics/0223.htm、http://www.foxtable.com/webhelp/topics/0224.htm。多看看基础语法 这个是一个顺序执行的逻辑,不是条件分支处理。至于空行可以删除不需要,添加空行的目的只是为了让代码好看一点
|