以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  merge的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=159786)

--  作者:狐狐妞
--  发布时间:2021/1/8 17:21:00
--  merge的问题

下面是一个批量合并的例子,假定目录c:\\data下有多个Excel文件,这些文件都有一个名为订单的表,需要将这些表中的数据批量并到Foxtable的订单表中:

For Each fl As String In FileSys.GetFiles("c:\\Data")
    Dim
 mg As
 New Merger
    mg.SourcePath = fl
    mg.Format = 
"excel" \'指定格式
    mg.SourceTableName = 
"订单" \'指定要合并的表
    mg.DataTableName = 
"订单" \'指定接收数据的表
    mg.Merge() 
\'开始合并
Next 

-----------------------------------------------------------

但是名字一样,里面也会重名啊,比如订单, 订单(1),订单(2).......... 能不能不管名字,直接合并里面所有EXCEL的表?如果不行,那么如何解决了?


--  作者:有点蓝
--  发布时间:2021/1/8 17:23:00
--  
Excel里面的不同sheet名称是不可能相同的

mg.SourceTableName = "sheet名称"

--  作者:狐狐妞
--  发布时间:2021/1/8 17:26:00
--  
是啊,我一次要合并30多个excel 文档,因为我们是做教育的,要给每次的学员课程打分,我总不可能在代码里面每个去添加sheet 名称吧?
--  作者:有点蓝
--  发布时间:2021/1/8 17:40:00
--  
名称默认都是sheet1啊,如果30多个excel 文档每个的sheet名称都不一样,那就没有办法使用Merger了。可以考虑这种:http://www.foxtable.com/webhelp/topics/2334.htm
--  作者:狐狐妞
--  发布时间:2021/1/8 17:57:00
--  
Dim dlg As New OpenFileDialog
dlg.Filter = "excel文件|*.xlsx"
dlg.MultiSelect = True \'允许选择多个文件
If dlg.ShowDialog =DialogResult.OK Then
    For Each fl As String In dlg.FileNames
        Dim mg As New Merger
        mg.SourcePath = fl
        mg.SourceTableName = "调查表$" 
        mg.DataTableName = "打分"
        mg.Merge()
    Next
End If
‘------------------------------这个是我的代码-----------------------’
我要合并的是这几个表 

图片点击可在新窗口打开查看此主题相关图片如下:foxtable 问题2.png
图片点击可在新窗口打开查看
谢谢



--  作者:狐狐妞
--  发布时间:2021/1/8 19:16:00
--  
或者用这种写法:
Dim dlg As New OpenFileDialog
\'dlg.Filter = "excle文件|*.xlsx"
\'dlg.MultiSelect = True \'允许选择多个文件
If dlg.ShowDialog =DialogResult.OK Then
\'-----------------------------------------------------
Dim Book As New XLS.Book(" 这里怎么填可以一次性上传N个不同名字的xls文件?")
Dim Sheet As XLS.Sheet = Book.Sheets(0)
Tables("打分").StopRedraw()
\'注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
Dim nms() As String = {"知识点","打分"}
\'注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
For n As Integer = 1 To Sheet.Rows.Count -1
    Dim r As Row = Tables("打分").AddNew()
    For m As Integer = 0 To nms.Length - 1
         r(nms(m)) = Sheet(n,m).Value
    Next
Next
End If
Tables("打分").ResumeRedraw(),

如何在DIALOG打开以后可选择多个不同名字的文件合并了?谢谢了。。。。。。。

--  作者:狐狐妞
--  发布时间:2021/1/8 22:58:00
--  
没人回答吗?谢谢:))))))
--  作者:有点蓝
--  发布时间:2021/1/9 9:07:00
--  
Dim dlg As New OpenFileDialog
\'dlg.Filter = "excle文件|*.xlsx"
dlg.MultiSelect = True \'允许选择多个文件
If dlg.ShowDialog =DialogResult.OK Then
\'-----------------------------------------------------
Tables("打分").StopRedraw()
For Each fl As String In dlg.FileNames
Dim Book As New XLS.Book(fl)
Dim Sheet As XLS.Sheet = Book.Sheets(0)

--  作者:狐狐妞
--  发布时间:2021/1/9 10:08:00
--  
谢谢有点甜,现在的代码是这样:
Dim dlg As New OpenFileDialog
dlg.MultiSelect = True \'允许选择多个文件
If dlg.ShowDialog =DialogResult.OK Then
    \'-----------------------------------------------------
    Tables("打分").StopRedraw()
    For Each fl As String In dlg.FileNames
        Dim Book As New XLS.Book(fl)
        Dim Sheet As XLS.Sheet = Book.Sheets(0)
        Tables("打分").StopRedraw()\'----注意以下数组中列名称的顺序,必须和Excel表中的列顺序一致
        Dim nms() As String = {"知识点","打分"}  \'-----注意下面的循环变量从1开始,而不是从0开始,因为Excel表的第一行是标题
        For n As Integer = 1 To Sheet.Rows.Count -1
            Dim r As Row = Tables("打分").AddNew()
            For m As Integer = 0 To nms.Length - 1
                r(nms(m)) = Sheet(n,m).Value
            Next
        Next
       Next
    End If
Tables("打分").ResumeRedraw()
Tables("打分").DataTable.Save
MessageBox.show("已经上传完毕","提示")
程序现在能运行了,但是我看表的时候是个大空白版,重启项目以后才能看到“打分“表里加紧去的数据
图片点击可在新窗口打开查看此主题相关图片如下:foxtable问题3.png
图片点击可在新窗口打开查看


--  作者:有点蓝
--  发布时间:2021/1/9 10:15:00
--  
应该是测试代码的时候出错,或者代码不合理导致Tables("打分").ResumeRedraw()没有调用到,