以文本方式查看主题

-  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=92718)

--  作者:tyconlance
--  发布时间:2016/11/11 7:49:00
--  [求助]有些EXCEL表无法合并进来 [已解决]
用高速合并功能Syscmd.Table.QuickMerge() 合并EXCEL表进来,有的可以有的不可以,请教一下是怎么回事?多谢
P.S 跟excel的格式没有有关系,xls,xlsx  格式都试了,该行的还是行,该不行的还是不行
P.S 跟项目没关系,在开发项目里运行,或是在发布的软件里运行,该行的还是行,该不行的还是不行
P.S 跟插件没有关系,AccessDatabaseEngine 这个东东有安装
请见附件,待合并进来的表,是之前直接导出来的格式,跟目标表每一列的格式应该都一样
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:待合并进行的表.xls

合并操作执行完之后,没有内容合并进行,空的,见下面截图

图片点击可在新窗口打开查看此主题相关图片如下:执行合并操作后截图.jpg
图片点击可在新窗口打开查看




[此贴子已经被作者于2016/11/28 15:23:09编辑过]

--  作者:有点蓝
--  发布时间:2016/11/11 8:39:00
--  
如果一列数据既有数字又有字符就会这样了,只能通过代码导入了,参考:http://www.foxtable.com/webhelp/scr/2334.htm

或者先把Excel数据导入access,再通过access合并进来

--  作者:有点色
--  发布时间:2016/11/11 8:45:00
--  

 方法一:excel另存为txt,然后再合并;

 

 方法二:编写代码合并,参考

 

下载信息  [文件大小:31.3 KB  下载次数:7]
图片点击可在新窗口打开查看点击浏览该文件:导入excel文件.zip

 


--  作者:tyconlance
--  发布时间:2016/11/13 8:54:00
--  
多谢老师赐教 
但我试了 另存成txt格式还是合并不进来。。。并且用talbe delimited 和unicode两种txt格式都试了,合并后还是不行,空的

导入到access可能有点麻烦,因为项目发布后给同事们用的 他们很多人都没有装access不会用access,即便会用,每天他们都要批量导进来一些数据的,这样他们嫌太麻烦
平常他们也只是用excel

最终我决定用您提到的编代码的方式,可还有好几类表也有可能要导数据进来,列数还很多,就想编个通用代码:
我试了一下,可以用了。但有些问题希望能得到老师指点:
1. 我本来想用datatables ,因为我不想打乱顺序,想从datatable的最后一行数据着往下加数据,可是试了一下不成功,提示什么键值不存在,请问老师用datatable这种方法可不可取?有没有办法实现?
2. 如果用tables,正常状态下,前台只显示一部分筛选的数据,这时把数据合并进来之后,datatable里原来的行的顺序都打被乱了(也不知道会不会出什么问题)。
请问老师如果用tables的方法,如何让合并进来的行,全部排到datatable所有行的最后面?以便不打乱原有的顺序
3. 能否看下这段代码还有哪些毛病或是隐患,帮忙再优化一下。
Dim dlg As New OpenFileDialog \'定义一个新的 OpenFileDialog
dlg.Filter= "Excel 文件*.xls,*.xlsx|*.xls;*.xlsx" \'设置筛选器
If dlg.ShowDialog = DialogResult.Ok Then
    Dim Book As New XLS.Book(dlg.filename)  \' 定义选定的工作薄
    Dim Sheet As XLS.Sheet = Book.Sheets(0) \' 定义第一个工作表
    Dim sc As Integer = sheet.Rows.Count-1 \' 返回即将要导进来的表有多少行数据,比如有带标题栏共300行,sc初始值为299(不带标题行)
    Dim nm As String =CurrentTable.Name \' 返回当前表的表名
    Dim tr As Integer = Tables(nm).Rows.Count-1 \'当前表有多少行数据,比如有 900000行 ,则tr初 始值为899999
    Dim tc As Integer = Tables(nm).Cols.Count-1 \'返回当前表有多少列数据,比如 有31  列 ,则tc初 始值为30
    Dim x As Integer \'定义写入的行坐标
    Dim y As Integer \'定义写入的列坐标
    Tables(nm).AddNew(sc) \' 加299行,标题栏已经有了,不用再导进来
    For i As Integer = 1 To sc \'要写行来的行数从1到299往行坐标上增加, 大循环298次,第一个单元格sheet(1,0)开始 跳过第一行标题栏
        x = tr+i \' 比如rows(900000)表示新的一行,rows(x)的初始值为rows(tr+i)=rows(899999+1)=rows(900000)
        For y = 0 To tc \' 从第一列开始计数,一直递增到第30列即最后一列
            If sheet(i,y) Is Nothing Then \'判断导进来有没有空值
                Tables(nm).Rows(x)(y) = Nothing \'如果有空值,那单元格也不要赋值了
            Else
                Tables(nm).Rows(x)(y) = Sheet(i,y).Value \' 合并进来的数据逐行逐行赋值给当前表格
            End If
        Next
    Next
End If

--  作者:有点色
--  发布时间:2016/11/13 9:24:00
--  

参考3楼的代码编写,那个就是通用的。

 

或者参考 http://foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=51515&skin=0