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


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

主题:生成多成表头

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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望:0 精华:0 注册:2016/4/28 9:58:00
生成多成表头  发帖心情 Post By:2020/3/14 21:55:00 [显示全部帖子]

 g.VerticalTotal=True
        Dim dt1 As DataTable = g.Build(True)        
        Dim Book As New XLS.Book '定义一个Excel工作簿        
        Dim Sheet As XLS.Sheet = Book.Sheets(0) '引用工作簿的第一个工作表
        For c As Integer = 0 To dt1.DataCols.Count-1
            Sheet(0, c).Value = dt1.DataCols(c).name
        Next        
        For r As Integer = 0 To dt1.DataRows.Count - 1 '填入数据
            For c As Integer = 0 To dt1.DataCols.Count-1
                Sheet(r +1, c).Value = dt1.datarows(r)(dt1.DataCols(c).name)
            Next
        Next
        Book.Save("c:\人数统计.xls")
        
我想在手机端上导出表,想先生成表,再用a标签打开文件这样来做,现在有个问题请教1:dt1是多层表头,如何生成多成表头EXCel


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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/15 8:35:00 [显示全部帖子]

后台数据生成临时表导出excle但有多层表头

用dt1.CreateSheetHeader(Sheet) '生成表头

提示不是datable的成员

[此贴子已经被作者于2020/3/15 8:37:10编辑过]

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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/15 21:00:00 [显示全部帖子]

老师:如果是固定的列,可以用合并单元格方式来硬干,但我的dt1生成的列是动态的,生成的EXCEL列也是动态的,这怎么合并


 If e.PostValues("统计分组")="学校"
        gp.Groups.AddDef("学校")
    End If
    If e.PostValues("统计分组")="年级"
        gp.Groups.AddDef("学校")
        gp.Groups.AddDef("年级")
    End If
    If e.PostValues("统计分组")="班级"
        gp.Groups.AddDef("学校")
        gp.Groups.AddDef("年级")
        gp.Groups.AddDef("班级")
    End If
    gp.Groups.AddDef("审核锁定","是否审核")
    If e.PostValues("bjrs")="on"
        gp.Totals.AddDef("姓名",AggregateEnum.Count,"学生人数")
    End If
    If e.PostValues("xsxb")="on"
        gp.Totals.AddExp("性别_男","case when 性别='男' then 1 else 0 end")
        gp.Totals.AddExp("性别_女","case when 性别='女' then 1 else 0 end")
    End If
    If e.PostValues("lsqk")="on"
        gp.Totals.AddExp("留守情况_非留守","case when 留守情况='非留守' then 1 else 0 end")
        gp.Totals.AddExp("留守情况_单亲留守","case when 留守情况='单亲留守' then 1 else 0 end")
        gp.Totals.AddExp("留守情况_双亲留守","case when 留守情况='双亲留守' then 1 else 0 end")
    End If
    If e.PostValues("jdfs")="on"
        gp.Totals.AddExp("就读方式_住校","case when 就读方式='住校' then 1 else 0 end")
        gp.Totals.AddExp("就读方式_走校","case when 就读方式='走校' then 1 else 0 end")
    End If
    If e.PostValues("jcqk")="on"
        gp.Totals.AddExp("就餐情况_早餐","case when 就餐情况='早餐' then 1 else 0 end")
        gp.Totals.AddExp("就餐情况_午餐","case when 就餐情况='午餐' then 1 else 0 end")
        gp.Totals.AddExp("就餐情况_晚餐","case when 就餐情况='晚餐' then 1 else 0 end")
        gp.Totals.AddExp("就餐情况_早午餐","case when 就餐情况='早午餐' then 1 else 0 end")
        gp.Totals.AddExp("就餐情况_早晚餐","case when 就餐情况='早晚餐' then 1 else 0 end")
        gp.Totals.AddExp("就餐情况_午晚餐","case when 就餐情况='午晚餐' then 1 else 0 end")
        gp.Totals.AddExp("就餐情况_早午晚餐","case when 就餐情况='早午晚餐' then 1 else 0 end")
    End If
    If e.PostValues("jkzk")="on"
        gp.Totals.AddExp("残疾人数","case when 健康状况<>'健康或良好' then 1 else 0 end")
    End If
    If e.PostValues("jdlk")="on"
        gp.Totals.AddExp("建档立卡","case when 贫困建档='是' then 1 else 0 end")
    End If
    If e.PostValues("mzqk")="on"
        gp.Totals.AddExp("少数民族","case when 民族<>'汉族' then 1 else 0 end")
    End If
    If e.PostValues("zzmm")="on"
        gp.Totals.AddExp("政治面貌_群众","case when 政治面貌='群众' then 1 else 0 end")
        gp.Totals.AddExp("政治面貌_团员","case when 政治面貌='共且青团员'then 1 else 0 end")
    End If
    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)
    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) '引用工作簿的第一个工作表
    For c As Integer = 0 To dt1.DataCols.Count-1
        Sheet(0, c).Value = dt1.DataCols(c).name
    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 +1, c).Value=Nothing
            Else
                Sheet(r +1, c).Value = dt1.datarows(r)(dt1.DataCols(c).name)
            End If
        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            


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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/16 7:40:00 [显示全部帖子]

谢谢老师,我打印下代码码一个一个研究,基本懂起这个意思,这个还是针对一列多行合并可以,我的实例中存在多行多列合并,且是不确定的,想自己研究一下,功力不够还是做不起,请老师指导,谢谢
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20200316073632.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2020/3/16 7:40:31编辑过]

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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/16 7:46:00 [显示全部帖子]

比如上面第1行3列,到1行16列应合并,第2行15列到3行15列也应合并,我试了下找到相同的内容就合并,但越整越乱,还是只有麻烦老师指导再研究学习

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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/16 11:57:00 [显示全部帖子]

因为考虑到手机显示列多了不方便,所以我是做的选择性显示列,所以有的表写不死,遍历我只有试下看整得好不

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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望: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就有这列,还是没搞定,这个基础差了弄不翻,还是请老师帮忙下,谢谢

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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望: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编辑过]

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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望: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呢


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


加好友 发短信
等级:八尾狐 帖子:1942 积分:14943 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/3/21 11:04:00 [显示全部帖子]

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

 回到顶部
总数 12 1 2 下一页