以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]表合并后导出的问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=105170)

--  作者:qingqian369
--  发布时间:2017/8/13 10:39:00
--  [求助]表合并后导出的问题


我把表做了合并,然后写了导出指定列的代码,可是导出后的excel还是没有合并,应该怎样修改代码才能实现啊?
原表

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170813103626.png
图片点击可在新窗口打开查看
合并后

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170813103555.png
图片点击可在新窗口打开查看

导出excel按钮的代码为

Dim dt As Table = Tables("实验")
Dim nms() As String ={"第一列","第二列","第三列_a","第四列_b","第八列","第九列","第十列"} \'要导出的列名
Dim caps() As String={"第一列","第二列","第三列_a","第四列_b","第八列","第九列","第十列"}\'对应的列标题
Dim hlvl As Integer = 3
Dim szs() As Integer = {100,100,80} \'对应的列宽
Dim Book As New XLS.Book \'定义一个Excel工作簿
Dim Sheet As XLS.Sheet = Book.Sheets(0) \'引用工作簿的第一个工作表
Dim jz As xls.style = book.NewStyle
jz.AlignHorz = XLS.AlignHorzEnum.Center
jz.AlignVert = XLS.AlignVertEnum.Center
For c As Integer = 0 To nms.length -1
    Dim ary() As String = caps(c).split("_")
    For i As Integer = 0 To ary.length-1
        sheet(i, c).value = ary(i)
        sheet(i, c).Style = jz
    Next
Next
For i As Integer = 0 To hlvl-1
    Dim pi As Integer = 0
    For c As Integer = 0 To nms.length -2
        If sheet(i,c).text = sheet(i,c+1).text Then
            Dim flag As Boolean = True
            For k As Integer = i-1 To 0 Step -1
                If sheet(k,c).value <> sheet(k,c+1).value Then
                    flag = False
                End If
            Next
            If flag Then
                pi += 1
            Else
                pi = 0
            End If
        Else
            sheet.MergeCell(i, c-pi, 1, pi+1)
            pi = 0
        End If
    Next
    sheet.MergeCell(i, nms.length-pi-1, 1, pi+1)
Next
For c As Integer = 0 To nms.length -1
    Dim pi As Integer = 0
    For i As Integer = hlvl-1 To 0 Step -1
        If sheet(i, c).text = "" Then
            pi += 1
        Else
            sheet.MergeCell(i, c, pi+1, 1)
            Exit For
        End If
    Next 
Next
For r As Integer = 0 To dt.Rows.Count - 1 \'填入数据
    For c As Integer = 0 To nms.length -1
        Sheet(r+hlvl, c).Value = dt.rows(r)(nms(c))
    Next
Next
book.save("C:\\Users\\SSC\\Desktop\\实验.xls")


这样导出后

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20170813103819.png
图片点击可在新窗口打开查看



请问,怎样才能导出后,单元格也是合并格式的,省的我再在excel里合并了

--  作者:有点甜
--  发布时间:2017/8/13 10:48:00
--  

 直接用saveexcel http://www.foxtable.com/webhelp/scr/0559.htm

 


--  作者:qingqian369
--  发布时间:2017/8/14 16:09:00
--  [求助]
不行啊,这上面的几个代码都不能实现,而且,我这个是多层表头,和导出制定列,麻烦再给看看,应该怎么修改代码才能实现合并单元格
--  作者:有点甜
--  发布时间:2017/8/14 17:09:00
--  
 把你不需要的列,隐藏起来,最后saveExcel即可。这样做更简单方便。
--  作者:qingqian369
--  发布时间:2017/8/15 7:58:00
--  [求助]
嗯嗯,谢谢大大,隐藏列能实现了。还是想问下,有代码可实现导出后自动合并单元格么?选择要隐藏的列,也有些麻烦啊。请大大费心再想想办法,谢谢啦
--  作者:有点甜
--  发布时间:2017/8/15 9:47:00
--  

1、用代码设置列的显示隐藏,再导出即可。

 

Tables("实验").Cols("第一列").Visible = False

Tables("实验").Cols("第二列").Visible = False

\'这里写导出excel的代码

Tables("实验").Cols("第一列").Visible = True

Tables("实验").Cols("第二列").Visible = True

 

2、如果手工编写代码合并单元格的话,比较麻烦,一般都是合并好直接导出比较简单。

 

    如果确实要做,参考这种写法 http://www.foxtable.com/webhelp/scr/2049.htm