以文本方式查看主题

-  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台账进行汇总
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:博世通档案移交台账.xlsx

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:水寨档案移交台账.xlsx

各位专家们
     大家好,我现在想请教一个问题,在我上传的附件中,有多个excel,其中的两个分别是“博世通档案移交台账”和“水寨档案移交台账”,我现在想把所有的excel台账都汇总到“台账汇总.foxtable”中的表“台账汇总”里。其中,foxtable中“部门”这一列就是每个excel的第1行第1列的“XX服务站”的这几个汉字提取之后的值,foxtable中“号牌号码”等其他列就是把所有excel表格中的对应号牌号码、号牌种类、办结日期等相对行和列保持不变地
 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:台账汇总.table

复制粘贴过去。我试着写出的代码如下,但预想结果出不来,请问需怎么修改代码


 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
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:博世通档案移交台账.xlsx

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:水寨档案移交台账.xlsx

谢谢你,有点蓝,这次预期结果能出来了。不过,今天我又有一个新问题要请教了。在今天我上传的附件中,有多个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
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:台账汇总.table


--  作者:有点蓝
--  发布时间: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.htmhttp://www.foxtable.com/webhelp/topics/0224.htm。多看看基础语法

这个是一个顺序执行的逻辑,不是条件分支处理。至于空行可以删除不需要,添加空行的目的只是为了让代码好看一点