Foxtable(狐表)用户栏目专家坐堂 → [求助] 单元格合并和汇总


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

主题:[求助] 单元格合并和汇总

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


加好友 发短信
等级:幼狐 帖子:140 积分:1250 威望:0 精华:0 注册:2015/11/5 13:33:00
  发帖心情 Post By:2022/9/2 10:59:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20220816110529.png
图片点击可在新窗口打开查看
老师,请参考项目文件和我需要的格式,要求:前幅,后幅两列合并单元格并存放相应款式图片,客人代码和款号两列合并单元格,根据客人代码统计相应的款号的数量。   请帮忙组织一下语句,谢谢!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:未出货明细 test.zip


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


加好友 发短信
等级:幼狐 帖子:140 积分:1250 威望:0 精华:0 注册:2015/11/5 13:33:00
  发帖心情 Post By:2022/9/6 9:22:00 [只看该作者]

以下是引用riverzhang163在2022/9/2 10:59:00的发言:

图片点击可在新窗口打开查看此主题相关图片如下:微信图片_20220816110529.png
图片点击可在新窗口打开查看
老师,请参考项目文件和我需要的格式,要求:前幅,后幅两列合并单元格并存放相应款式图片,客人代码和款号两列合并单元格,根据客人代码统计相应的款号的数量。   请帮忙组织一下语句,谢谢!
 下载信息  [文件大小:33.9 KB  下载次数:1]
图片点击可在新窗口打开查看点击浏览该文件:未出货明细 test.zip

老师,请问这个要怎样处理? 谢谢!


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


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

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:未出货明细 test.zip



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


加好友 发短信
等级:幼狐 帖子:140 积分:1250 威望:0 精华:0 注册:2015/11/5 13:33:00
  发帖心情 Post By:2022/10/6 11:01:00 [只看该作者]

老师,我试了一下您写的语句,但是没有达到效果,请您帮忙再看一下。   以客人名称合并单元格,然后根据客人名称把相应的款号,前幅(图片列),后幅(图片列)合并,在此基础上根据客人名称统计每个款号的数量。 

请老师帮忙。

谢谢!

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


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

举例说明一下,什么效果有问题

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


加好友 发短信
等级:幼狐 帖子:140 积分:1250 威望:0 精华:0 注册:2015/11/5 13:33:00
  发帖心情 Post By:2022/10/6 11:27:00 [只看该作者]

客人名称可以合并单元格没问题,后面的款号要同一个款号合并在一起,前幅和后幅两个图片列也要合并,然后插入图片

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


加好友 发短信
等级:幼狐 帖子:140 积分:1250 威望:0 精华:0 注册:2015/11/5 13:33:00
[求助]  发帖心情 Post By:2022/10/6 15:25:00 [只看该作者]

其实就是专业报表的帮助的如下内容,怎么把“小计”的统计加进去,统计每个客人的相应款号的数量。   这个能表达出来就好了,我试了几次都无法完成。  请老师帮忙。谢谢!

Dim doc As New PrintDoc
Dim 
rt As New prt.RenderTable
Dim 
tb As Table = Tables("订单")
Dim 
ColNames As String() = New String(){"产品""客户","单价","折扣","数量","金额","日期"}
Dim MergeCols As Integer = '指定要合并的列数
tb.Sort = "产品,客户" '根据合并列排序
rt.Width = 
"Auto"
rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded
rt.Style.Font = tb.Font
rt.Style.TextAlignVert = prt.AlignVertEnum.Center
rt.RepeatGridLinesVert = 
True '换页后重复表格线
For
 c As Integer = 0 To ColNames.Length - 1
    
Dim lr As Integer ' 用于保存合并区域的起始行
    rt.Cells(
0,c).Text = ColNames(c)
    rt.Cells(
0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center
    rt.Cols(c).Width = tb.Cols(ColNames(c)).PrintWidth

    If
 tb.Cols(ColNames(c)).IsNumeric Orelse tb.Cols(ColNames(c)).IsDate Then
        rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right

    End
 If
    For
 r As integer = 0 To tb.Rows.Count - 1
        
If c <= MergeCols - 1 then '如果是要合并的列
            
Dim Merge As Boolean = True
            If
 r = 0 Then
                Merge = 
False
            Else
                For
 n As Integer = 0 To c
                    if
 tb.Rows(r)(ColNames(n)) <> tb.Rows(r - 1)(ColNames(n))
                        Merge = 
False
                        Exit
 For
                    End
 If
                Next
            End
 If
            If
 Merge Then
                rt.Cells(lr,c).SpanRows = rt.Cells(lr,c).SpanRows + 
1
            
Else
                rt.Cells(r + 
1, c).Text = tb.Rows(r)(ColNames(c))
                rt.Cells(r + 
1, c).VertSplitBehavior = prt.CellSplitBehaviorEnum.Copy '换页 后重复单元格
                lr = r + 
1
            
End If
        Else

            rt.Cells(r + 
1, c).Text = tb.Rows(r)(ColNames(c))
        End
 If
    Next
Next

rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
rt.CellStyle.Spacing.All = 
0.5
rt.Rows(
0).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.RowGroups(
0,1).Header = prt.TableHeaderEnum.All
doc.Body.Children.Add(rt)
doc.Preview()

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


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

用23楼的例子截图说明,什么地方有问题

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


加好友 发短信
等级:幼狐 帖子:140 积分:1250 威望:0 精华:0 注册:2015/11/5 13:33:00
  发帖心情 Post By:2022/10/7 18:32:00 [只看该作者]

以下语句运行可以正常,我现在就想知道根据客人名称和款号合并单元格后怎样统计客人名称下的各个款号的数量小计,统计的语句要放在哪一段。谢谢!



Dim doc As New PrintDoc
Dim 
rt As New prt.RenderTable
Dim 
tb As Table = Tables("订单")

Dim cnt As Integer
Dim ColNames As String() = New String(){"客人名称", "款号","前幅","后幅","客人订单号","数量","已完成数量"}
Dim MergeCols As Integer = 4 '
指定要合并的列数


tb.Sort = "
客人名称,款号.前幅.后幅" '根据合并列排序
rt.Width = "Auto"
rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded
rt.Style.Font = tb.Font
rt.Style.TextAlignVert = prt.AlignVertEnum.Center
rt.RepeatGridLinesVert = 
True '换页后重复表格线
For
 c As Integer = 0 To ColNames.Length - 1
    Dim lr As Integer 用于保存合并区域的起始行
    rt.Cells(
0,c).Text = ColNames(c)
    rt.Cells(
0,c).Style.TextAlignHorz = prt.AlignHorzEnum.Center
    rt.Cols(c).Width = tb.Cols(ColNames(c)).PrintWidth

    If
 tb.Cols(ColNames(c)).IsNumeric Orelse tb.Cols(ColNames(c)).IsDate Then
        rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right

    End
 If
    For r As integer = 0 To tb.Rows.Count - 1
        If c <= MergeCols - 1 then '如果是要合并的列
            
Dim Merge As Boolean = True
            If r = 0 Then
                Merge = 
False
            Else
                For
 n As Integer = 0 To c
                    if
 tb.Rows(r)(ColNames(n)) <> tb.Rows(r - 1)(ColNames(n))
                        Merge = 
False
                        Exit
 For
                    End
 If
                Next
            End
 If
            If
 Merge Then
                rt.Cells(lr,c).SpanRows = rt.Cells(lr,c).SpanRows + 
1
            Else
                rt.Cells(r + 
1, c).Text = tb.Rows(r)(ColNames(c))
                rt.Cells(r + 
1, c).VertSplitBehavior = prt.CellSplitBehaviorEnum.Copy '换页 后重复单元格
                lr = r + 
1
            
End If
        Else
            rt.Cells(r + 
1, c).Text = tb.Rows(r)(ColNames(c))
        End
 If
    Next

cnt = rt.Rows.Count
    rt.Cells(cnt, 0).Text = "
小计 " & pd '打印产品的小计
    rt.Cells(cnt,5).Text = tbl.compute("Sum(
数量)", "款号 = '" & pd & "' and 客人名称 = ‘”& kh & ”’")

Next

rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
rt.CellStyle.Spacing.All = 
0.5
rt.Rows(
0).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.RowGroups(
0,1).Header = prt.TableHeaderEnum.All
doc.Body.Children.Add(rt)
doc.Preview()


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


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

您这种用法本身就很!非常!的麻烦,因为增加的小计行会会破坏原有的行数遍历计数,所以需要增加一些计数,详情请自行研究23楼的代码。如果看不懂建议不要使用这种方法。

或者考虑去掉合并和小计其中一个功能。

或者考虑先在Foxtable的表格里添加统计行进行统计(可以使用汇总统计,或者手工插入统计行),然后根据表格直接遍历生成报表,不要在报表里动态增加小计行

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