Foxtable(狐表)用户栏目专家坐堂 → 生成多成表头


  共有3294人关注过本帖树形打印复制链接

主题:生成多成表头

帅哥哟,离线,有人找我吗?
有点蓝
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/16 12:04:00 [只看该作者]

像5楼这种统计代码,列名和顺序肯定都是已经写死的。选择性显示列是用户在浏览器选择的?

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1942 积分:14919 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/16 16:57:00 [只看该作者]

 If e.PostValues("fkxz")="on"
        gp.Totals.AddExp("户口性质_农村","case when 户口性质='农村' then 1 else 0 end")
        gp.Totals.AddExp("户口性质_城镇","case when 户口性质='城镇'then 1 else 0 end")
    End If
    gp.VerticalTotal=True
    Dim dt1 As DataTable = gp.Build(True)

用的开关的选择是否显示户口性质列,如果显示,则dt1就有这列,还是没搞定,这个基础差了弄不翻,还是请老师帮忙下,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/16 17:32:00 [只看该作者]

试试

Dim i As  Integer = 0
Dim lst As new List(of Integer)
For c As Integer = 0 To dt1.DataCols.Count-1
    Dim ar() As String = dt1.DataCols(c).name.split("_")
    If ar.Length = 1 Then
        lst.Add(c)
        Sheet(0, c).Value = ar(0)
    Else
        If ar.length > i Then i=ar.length
        For j As Integer = 0 To ar.length - 1
            Sheet(j, c).Value = ar(j)
        Next
    End If
Next


For k As Integer = 0 To i
    Dim m As Integer = 0
    For n As Integer = 1 To Sheet.Cols.count - 1
        If lst.Contains(n) Then
            If n-1 > m Then
                Sheet.MergeCell(k,m,1,n-m)
            End If
            m=n
            Continue For
        End If
        If Sheet(k, n-1).Value <> Sheet(k, n).Value Then
            If n-1 > m Then
                Sheet.MergeCell(k,m,1,n-m)
            End If
            m=n
        End If
    Next
Next

For Each k As Integer In lst
    Sheet.MergeCell(0,k,i,1)
Next

For r As Integer = 0 To dt1.DataRows.Count - 1 '填入数据
    For c As Integer = 0 To dt1.DataCols.Count-1
        Sheet(r+i +1, c).Value = dt1.datarows(r)(dt1.DataCols(c).name)
    Next
Next

Book.Save("c:\人数统计.xls")

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1942 积分:14919 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/16 18:06:00 [只看该作者]

对了,就还差一点点了非常谢谢,标注这种空的列也要合并就可以了
图片点击可在新窗口打开查看此主题相关图片如下:1584352983(1).png
图片点击可在新窗口打开查看

[此贴子已经被作者于2020/3/16 18:07:10编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  15楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/16 20:22:00 [只看该作者]

不好处理,建议改下列名,比如:初中人数_合计_班数、初中人数_合计_人数

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1942 积分:14919 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/21 9:11:00 [只看该作者]

 Dim dt1 As DataTable = g.Build(True)
        For Each r As DataRow In dt1.DataRows
            For Each c As DataCol In dt1.DataCols
                If c.IsNumeric AndAlso r(c.Name)=0
                    r(c.name)=Nothing
                End If
            Next
        Next
        Dim Book As New XLS.Book '定义一个Excel工作簿
        Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
        Dim i As  Integer = 1
        Dim lst As new List(of Integer)                
        Dim Style As XLS.Style = Book.NewStyle() '定义新样式
        Style.AlignHorz = XLS.AlignHorzEnum.Center
        Style.AlignVert = XLS.AlignVertEnum.Center
        Style.BorderTop = XLS.LineStyleEnum.Thin
        Style.BorderBottom = XLS.LineStyleEnum.Thin
        Style.BorderLeft = XLS.LineStyleEnum.Thin
        Style.BorderRight = XLS.LineStyleEnum.Thin          
        For c As Integer = 0 To dt1.DataCols.Count-1
            Dim ar() As String = dt1.DataCols(c).name.split("_")
            If ar.Length = 1 Then
                lst.Add(c)
                Sheet(0, c).Value = ar(0)
                Sheet(0, c).Style=style
            Else
                If ar.length > i Then i=ar.length
                For j As Integer = 0 To ar.length - 1
                    Sheet(j, c).Value = ar(j)
                    Sheet(j, c).style = style
                Next
            End If
        Next
        For k As Integer = 0 To i-1
            Dim m As Integer = 0
            For n As Integer = 1 To Sheet.Cols.count - 1
                If lst.Contains(n) Then
                    If n-1 > m Then
                        Sheet.MergeCell(k,m,1,n-m)
                    End If
                    m=n
                    Continue For
                End If
                If Sheet(k, n-1).Value <> Sheet(k, n).Value Then
                    If n-1 > m Then
                        Sheet.MergeCell(k,m,1,n-m)
                    End If
                    m=n
                End If
            Next
        Next
        For Each k As Integer In lst
            Sheet.MergeCell(0,k,i,1)
        Next
        For r As Integer = 0 To dt1.DataRows.Count - 1 '填入数据
            For c As Integer = 0 To dt1.DataCols.Count-1
                If dt1.DataCols(c).IsNumeric AndAlso dt1.datarows(r)(dt1.DataCols(c).name)=0
                    Sheet(r+i, c).Value =Nothing
                Else
                    Sheet(r+i, c).Value = dt1.datarows(r)(dt1.DataCols(c).name)
                End If
                Sheet(r+i, c).Style=style
            Next
        Next       
        Dim fl As String ="C:\web\tb\tb" & e.Cookies("userid") & "统表.xls"
        Book.Save(fl)
        With wb.AddActionSheet("","menu") '设计菜单
            .Add("mnuload", "下载表格").Attribute=" & e.Cookies("userid") & "统表.xls'"""
            .Add("mnuCancel","取消","",True)
        End With
        wb.InsertHTML("<div style='width:100%; overflow-x:auto;'>")
        With wb.AddTable("","Table1")
            .attribute ="style = 'border:1px solid black;text-align:center;vertical-align:middle;white-space:nowrap;font-size:16px;padding:5px;'"
            .ActiveSheet = "menu" '设置菜单
            .CreateFromDataTable(dt1)
        End With
        wb.InsertHTML("</div")
    End If
老师,调整为这样基本实现了想法和要求,再请教几个问题
1、如何设置表格列的宽度为自动宽度
2、这种方式不管用户下不下载表格都去生成表格,必竞要花时间,如何能需要下载才生成表格下载
3、ft有什么办法将With wb.AddTable("","Table1")原样导出excel呢


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/21 10:11:00 [只看该作者]

1、要使用vba设置,保存后再另外设置:http://www.foxtable.com/webhelp/topics/2121.htm
2、添加一个下载按钮,点击后在生成
3、没有办法

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1942 积分:14919 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/21 11:04:00 [只看该作者]

请问老师,在手机上下载后要去找到这个文件再打开EXCEL,有什么办法点下载,手机下载后自动打开

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107680 积分:547721 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/21 11:09:00 [只看该作者]

没有办法

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1942 积分:14919 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/22 10:00:00 [只看该作者]

还有个问题,当点了下载后,点手机返回键就会退出系统,如果不点下载是可以返回,这可怎么是好

 回到顶部
总数 21 上一页 1 2 3 下一页