Foxtable(狐表)用户栏目专家坐堂 → 相同的第一列如何合并成一个单元格?


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

主题:相同的第一列如何合并成一个单元格?

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


加好友 发短信
等级:童狐 帖子:298 积分:4225 威望:0 精华:0 注册:2009/11/4 16:30:00
相同的第一列如何合并成一个单元格?  发帖心情 Post By:2020/6/20 19:24:00 [只看该作者]

相同的"线路"列如何合并成一个单元格(如图)?

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

代码如下:
Tables("现金录入").sort = "序号"
Dim doc As New PrintDoc '定义一个新报表

doc.PageSetting.PaperKind = 9  'A4纸
doc.PageSetting.Landscape = False '竖向打印
doc.PageSetting.LeftMargin = 10 '设置左边距
doc.PageSetting.RightMargin = 10 '设置右边距
doc.PageSetting.TopMargin = 10 '设置上边距
doc.PageSetting.BottomMargin = 10 '设置下边距

Dim rt As Prt.RenderTable
rt = New prt.RenderTable
rt.Style.TextAlignVert = prt.AlignVertEnum.Center
'rt.Style.GridLines.All = New prt.LineDef(0.1,Color.White)    '无边框
rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) '灰色网格线
rt.CellStyle.Spacing.All = 0.2
rt.Style.Font = New Font("宋体",9)
rt.RowGroups(0,1).Header = prt.TableHeaderEnum.All '利用行组,将第一行设为表头
rt.Rows(0).Style.TextAlignHorz = prt.AlignHorzEnum.Center '第一行内容水平居中
Dim cnt As Integer
Dim tbl As Table = Tables("现金录入")
Dim ColNames As String() = New String(){"线路","车号","纸币","硬币","金额"}
Dim ColWidths As String() = New String(){"20", "25", "25","30","30"}
Dim drs As List(Of DataRow)
Dim Regions As List(Of String) = tbl.DataTable.GetValues("线路","","序号")
For c As Integer = 0 To ColNames.Length - 1
    rt.Cells(0,c).Text = ColNames(c)
    rt.Cols(c).Width = ColWidths(c)
Next
rt.cells(0,2).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.cells(0,3).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.cells(0,4).Style.TextAlignHorz = prt.AlignHorzEnum.Center 
For Each pd As String In Regions
    drs = tbl.DataTable.Select("[线路] = '" & pd & "'","序号")
    Dim m As Integer = drs.count '记录每条线路的行数
    For Each dr As DataRow In drs
        cnt = rt.Rows.Count '报表总行数
       ' 这里cnt 以1,3,5,7,9......递增,不能理解.
        For c As Integer = 0 To ColNames.Length - 1
            If tbl.Cols(ColNames(c)).IsNumeric  Then
                If dr(ColNames(c)) <> 0 Then
                    rt.Cells(cnt + 1, c).Text = Format(dr(tbl.Cols(ColNames(c)).Name),"0.0")
                    rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right
                End If
            Else
                rt.Cells(cnt + 1, c).Text = dr(tbl.Cols(ColNames(c)).Name)
                rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.center
            End If
        Next
    Next
    cnt = rt.Rows.Count
    rt.Cells(cnt, 0).Text = "小计 " & pd    
    rt.Cells(cnt,2).Text = Format(tbl.compute("Sum(纸币)", "线路 = '" & pd & "'"),"0.0")
    rt.Cells(cnt,3).Text = Format(tbl.compute("Sum(硬币)", "线路 = '" & pd & "'"),"0.0")
    rt.Cells(cnt,4).Text = Format(tbl.compute("Sum(金额)", "线路 = '" & pd & "'"),"0.0")
    rt.Cells(cnt-m,0).SpanRows = m  '问题出在此处,应怎样修改?
    rt.Cells(cnt,0).SpanCols = 2 
Next
cnt = rt.Rows.Count
rt.Cells(cnt, 0).Text = "合计 " '打印合计
rt.Cells(cnt, 2).Text = Format(tbl.compute("Sum(纸币)"),"0.0")
rt.Cells(cnt, 3).Text = Format(tbl.compute("Sum(硬币)"),"0.0")
rt.Cells(cnt, 4).Text = Format(tbl.compute("Sum(金额)"),"0.0")
Doc.Columns.Add() '增加第一栏
Doc.Columns.Add() '增加第二栏
Doc.Columns.Add() '增加第三栏
Doc.Columns(0).Spacing = 3
Doc.Columns(1).Spacing = 3
Doc.Body.Children.Add(rt)

Dim ra As New prt.RenderArea
Dim rx As New prt.RenderText
Dim tm As Date = e.Form.Controls("DateTimePicker1").value
rx.Text = "车售款明细表 (" & Format(tm,"yyyy年MM月dd日") & ")"
rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center
rx.Style.Padding.Bottom = 0.5
rx.Style.Font = New Font("黑体",11)
ra.Children.Add(rx)
Doc.PageHeader = ra

rx = New prt.RenderText '设置文本对象的内容
Dim cmb As String = e.Form.Controls("CheckedComboBox1").value
rx.Text = "点钞人员: " & cmb
rx.Style.TextAlignHorz = prt.AlignHorzEnum.Right '靠右对齐
rx.Style.Padding.Bottom = 0.5 '底端内容缩进0.5毫米
rx.Style.FontSize = 8 '字体大小为8磅
Doc.PageFooter = rx

doc.Preview() '预览

[此贴子已经被作者于2020/6/20 19:25:04编辑过]

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


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

……
rt.cells(0,2).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.cells(0,3).Style.TextAlignHorz = prt.AlignHorzEnum.Center
rt.cells(0,4).Style.TextAlignHorz = prt.AlignHorzEnum.Center 
For Each pd As String In Regions
    drs = tbl.DataTable.Select("[线路] = '" & pd & "'","序号")
    Dim m As Integer = drs.count '记录每条线路的行数
cnt = rt.Rows.Count+1 '报表总行数
    For Each dr As DataRow In drs
        For c As Integer = 1 To ColNames.Length - 1
            If tbl.Cols(ColNames(c)).IsNumeric  Then
                If dr(ColNames(c)) <> 0 Then
                    rt.Cells(cnt, c).Text = Format(dr(tbl.Cols(ColNames(c)).Name),"0.0")
                    rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.Right
                End If
            Else
                rt.Cells(cnt, c).Text = dr(tbl.Cols(ColNames(c)).Name)
                rt.Cols(c).Style.TextAlignHorz = prt.AlignHorzEnum.center
            End If
        Next
cnt += 1
    Next
rt.Cells(cnt-m,0).SpanRows = m 
rt.Cells(cnt -m , 0).Text = pd
cnt += 1
    rt.Cells(cnt, 0).Text = "小计 " & pd    
    rt.Cells(cnt,2).Text = Format(tbl.compute("Sum(纸币)", "线路 = '" & pd & "'"),"0.0")
    rt.Cells(cnt,3).Text = Format(tbl.compute("Sum(硬币)", "线路 = '" & pd & "'"),"0.0")
    rt.Cells(cnt,4).Text = Format(tbl.compute("Sum(金额)", "线路 = '" & pd & "'"),"0.0")
    rt.Cells(cnt,0).SpanCols = 2 
Next
cnt = rt.Rows.Count
rt.Cells(cnt, 0).Text = "合计 " '打印合计
……

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


加好友 发短信
等级:童狐 帖子:298 积分:4225 威望:0 精华:0 注册:2009/11/4 16:30:00
  发帖心情 Post By:2020/6/21 21:13:00 [只看该作者]

完全达到预期效果.先谢谢老师,再慢慢学习.

 回到顶部