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


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

主题:生成多成表头

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112367 积分:572097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/15 20:36:00 [显示全部帖子]

这个是table才有的方法。这种情况只能是自己判断列是否是多层表头,然后手工添加多行标题行,并对不是多层表头的进行合并

类似
Dim i As  Integer = 0
For c As Integer = 0 To dt1.DataCols.Count-1
    Dim ar() As String = dt1.DataCols(c).name.split("_")
    If ar.length > i Then i=ar.length
    For j As Integer = 0 To ar.length - 1
        Sheet(j, c).Value = ar(j)
    Next
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")

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

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112367 积分:572097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/15 23:09: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 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

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112367 积分:572097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/16 8:55:00 [显示全部帖子]

自己写代码生成的表格,也就是说列名是已知的,并不是不确定的,如下所示,这种只能是自己数数哪些单元格是需要合并的,如第1行3列,到1行16列,写死代码好了
    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

如果不写死,看看标题有多少行,每一行都遍历所有列,如果单元格内容相同的就把索引记录下来,然后在合并即可

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112367 积分:572097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/16 12:04:00 [显示全部帖子]

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

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112367 积分:572097 威望: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")

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112367 积分:572097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/16 20:22:00 [显示全部帖子]

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

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112367 积分:572097 威望: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、没有办法

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112367 积分:572097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/21 11:09:00 [显示全部帖子]

没有办法

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112367 积分:572097 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/3/22 21:19:00 [显示全部帖子]

微信、浏览器我测试没有问题。如果是hbuilder,到他们论坛问问,我也不懂

 回到顶部