Foxtable(狐表)用户栏目专家坐堂 → 报表数据格式化


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

主题:报表数据格式化

美女呀,离线,留言给我吧!
cjl333333333
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:200 积分:1706 威望:0 精华:0 注册:2015/2/3 17:04:00
报表数据格式化  发帖心情 Post By:2023/11/29 16:10:00 [只看该作者]

For c As Integer = 0 To tb.Cols.Count -1 '逐列设置和填入内容
    If tb.Cols(c).Visible Then
        rt.Cols(cnt).Width = tb.Cols(c).PrintWidth '列宽等于实际列宽
        If tb.Cols(c).IsNumeric OrElse tb.Cols(c).IsDate Then '如果是数值或日期列
            rt.Cols(cnt).Style.TextAlignHorz = prt.AlignHorzEnum.Right '数据水平靠右
        End If
        For R As Integer =0 To TB.RowS.COUNT -1
            rt.Cells(0+HD, cnt).Text = rr(c)
            Select Case c
                Case "一层_重量","一层_米数" '如果是人口列或面积列
                    rr(c)= format(rr(c),"00.0") '则显示千位分割符号
                Case "一层_比例","二层_比例" '如果是人口列或面积列
                    rr(c)= format(rr(c),"00.0%") '则显示千位分割符号
            End Select
            
        Next
        cnt = cnt + 1
    End If
Next
老师您好,我这里面列格式化是那里错了吗。或者报表有什么可以用表数据一样(因为每列属性都有做了定义,但到报表它还是很多位数)。谢谢指教。

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


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

Select Case c
改为
Select Case tb.Cols(c).name

 回到顶部
美女呀,离线,留言给我吧!
cjl333333333
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:200 积分:1706 威望:0 精华:0 注册:2015/2/3 17:04:00
  发帖心情 Post By:2023/11/29 16:34:00 [只看该作者]

还是不行


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


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

给出完整代码!

 回到顶部
美女呀,离线,留言给我吧!
cjl333333333
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:200 积分:1706 威望:0 精华:0 注册:2015/2/3 17:04:00
  发帖心情 Post By:2023/11/29 16:50:00 [只看该作者]

Dim doc As New PrintDoc()
doc.PageSetting.PaperKind = 9 '纸张类型
Doc.PageSetting.LeftMargin = 5 '设置左边距
Doc.PageSetting.RightMargin = 5 '设置右边距
Doc.PageSetting.TopMargin = 5 '设置上边距
Doc.PageSetting.BottomMargin = 5 '设置下边距
doc.PageSetting.Landscape = True
Dim rx As New prt.RenderText '定义一个文本对象

rx.text = "集控表"
rx.Style.FontBold = True '字体加粗
rx.Style.FontSize = 16 '大体大小为16磅
rx.Style.TextAlignHorz = prt.AlignHorzEnum.Center '水平居中排列
rx.Style.Spacing.Bottom = 3 '和下面的对象(表格)距离3毫米
doc.Body.Children.Add(rx) '加入到报表中

Dim rt1 As New prt.RenderTable() '定义一个表格对象
rt1.Rows.Count = 2 '设置总行数
rt1.Cols.Count = 4 '设置总列数
rt1.Height = 20'设置表格的高度为80毫米
rT1.Style.FontSize = 12 '字体大小为8磅
rt1.CellStyle.Spacing.All = 1 '单元格内容缩进1毫米
rT1.Style.Spacing.Bottom = 2 '和下面的对象(表格)距离3毫米
rt1.Cols(0).Width = 25
rt1.Cols(1).Width = 35
rt1.Cols(2).Width = 20
rt1.Cells(0,0).Text= "产品编号"
rt1.Cells(0,1).Text = Tables("生产单").Current("老产品编号")
rt1.Cells(0,2).Text=  "产品名称"
rt1.Cells(0,3).Text= Tables("集控表").Current("产品名称")
rt1.Cells(1,0).Text= "产品类型"
rt1.Cells(1,1).Text = Tables("集控表").Current("产品类型")
rt1.Cells(1,2).Text=  "产品结构"
rt1.Cells(1,3).Text= Tables("集控表").Current("产品结构")
rt1.Style.Gridlines.All = New prt.Linedef(Color.Gray) '灰色网格线
doc.Body.Children.Add(rt1)
Dim rt As New prt.RenderTable '定义一个新表格
Dim tb As Table = Tables("集控表")
Dim RR As Row =tb.rows(0)
Dim hd As Integer = tb.HeaderRows '获得表头的层数
Dim cnt As Integer '用于记录列位置
'rt.Width = "Auto" '表格宽度为自动,也就是等于各列设置宽度之和
rt.Style.Font = tb.Font
tb.CreateReportHeader(rt,True) '生成表头,排除隐藏列
For c As Integer = 0 To tb.Cols.Count -1 '逐列设置和填入内容
    If tb.Cols(c).Visible Then
        rt.Cols(cnt).Width = tb.Cols(c).PrintWidth '列宽等于实际列宽
        If tb.Cols(c).IsNumeric OrElse tb.Cols(c).IsDate Then '如果是数值或日期列
            rt.Cols(cnt).Style.TextAlignHorz = prt.AlignHorzEnum.Right '数据水平靠右
        End If
        For R As Integer =0 To TB.RowS.COUNT -1
            rt.Cells(0+HD, cnt).Text = rr(c)
            Select Case tb.Cols(c).name
                Case "一层_重量","一层_米数" '如果是人口列或面积列
                    rr(c)= format(rr(c),"00.0") '则显示千位分割符号
                Case "一层_比例","二层_比例" '如果是人口列或面积列
                    rr(c)= format(rr(c),"00.0%") '则显示千位分割符号
            End Select
            
        Next
        cnt = cnt + 1
    End If
Next
rt.Style.Gridlines.All = New prt.Linedef(Color.Gray) '灰色网格线
rt.CellStyle.Spacing.All = 0.5 '单元格内距设为0.5毫米
rt.RowGroups(0, tb.HeaderRows).Header = prt.TableHeaderEnum.All '利用行组功能设置表头
doc.Body.Children.Add(rt) '将表格加入到报表
Dim rt2 As New prt.RenderTable() '定义一个表格对象
rt2.Rows.Count = 2 '设置总行数
rt2.Cols.Count = 2 '设置总列数
rt2.Height = 20'设置表格的高度为80毫米
rT2.Style.FontSize = 12 '字体大小为8磅
rt2.CellStyle.Spacing.All = 1 '单元格内容缩进1毫米
rT2.Style.Spacing.Bottom = 2 '和下面的对象(表格)距离3毫米
rt2.Cols(0).Width = 45
rt2.Cells(0,0).Text=  "实际与预算正负比(%)"
rt2.Cells(0,1).Text =RR("预算与实际比例")
rt2.Cells(1,0).Text= "总结"
rt2.Cells(1,1).Text =RR("总结")

rt2.CellStyle.Spacing.All = 0.5 '单元格内距设为0.5毫米
rt2.Style.Gridlines.All = New prt.Linedef(Color.Gray) '灰色网格线
doc.Body.Children.Add(rt2)

Dim rt11 As New prt.RenderTable '定义一个新表格
Dim tb1 As Table = Tables("集控表")
Dim RR1 As Row =tb1.rows(1)
Dim hd1 As Integer = tb.HeaderRows '获得表头的层数
Dim cnt1 As Integer '用于记录列位置
'rt.Width = "Auto" '表格宽度为自动,也就是等于各列设置宽度之和
rt11.Style.Font = tb1.Font
tb1.CreateReportHeader(rt11,True) '生成表头,排除隐藏列
For c1 As Integer = 0 To tb1.Cols.Count -1 '逐列设置和填入内容
    If tb1.Cols(c1).Visible Then
        rt11.Cols(cnt1).Width = tb1.Cols(c1).PrintWidth '列宽等于实际列宽
        If tb1.Cols(c1).IsNumeric OrElse tb1.Cols(c1).IsDate Then '如果是数值或日期列
            rt11.Cols(cnt1).Style.TextAlignHorz = prt.AlignHorzEnum.Right '数据水平靠右
        End If
        For R1 As Integer =0 To TB1.RowS.COUNT -1
            rt11.Cells(1+HD1, cnt1).Text =rr1(c1)
        Next
        cnt1 = cnt1 + 1
    End If
Next
rt11.Style.Gridlines.All = New prt.Linedef(Color.Gray) '灰色网格线
rt11.CellStyle.Spacing.All = 0.5 '单元格内距设为0.5毫米
rt11.RowGroups(0, tb1.HeaderRows).Header = prt.TableHeaderEnum.All '利用行组功能设置表头
doc.Body.Children.Add(rt11) '将表格加入到报表
Dim rt3 As New prt.RenderTable() '定义一个表格对象
rt3.Rows.Count = 2 '设置总行数
rt3.Cols.Count = 2 '设置总列数
rt3.Height = 30'设置表格的高度为80毫米
rT3.Style.FontSize = 12 '字体大小为8磅
rt3.CellStyle.Spacing.All = 1 '单元格内容缩进1毫米
rT3.Style.Spacing.Bottom = 2 '和下面的对象(表格)距离3毫米
rt3.Cols(0).Width = 45
rt3.Cells(0,0).Text=  "实际与预算正负比(%)"
rt3.Cells(0,1).Text = RR1("预算与实际比例")
rt3.Cells(1,0).Text= "总结"
rt3.Cells(0,1).Text =RR1("总结")
rt3.Cells(2,0).Text = "下批生产优化"
rt3.Cells(0,1).Text =RR1("下批生产优化计划")
rt3.Style.Gridlines.All = New prt.Linedef(Color.Gray) '灰色网格线
rt3.CellStyle.Spacing.All = 0.5 '单元格内距设为0.5毫米
doc.Body.Children.Add(rt3)


doc.Preview()
老师,我这就想着里面数字列格式化为两位小数。

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


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

        For R As Integer =0 To TB.RowS.COUNT -1
rr = TB.RowS(r)
            
            Select Case tb.Cols(c).name
                Case "一层_重量","一层_米数" '如果是人口列或面积列
                    rt.Cells(0+HD, cnt).Text = format(rr(c),"00.0") '则显示千位分割符号
                Case "一层_比例","二层_比例" '如果是人口列或面积列
                   rt.Cells(0+HD, cnt).Text = format(rr(c),"00.0%") '则显示千位分割符号
case else
rt.Cells(0+HD, cnt).Text = rr(c)
            End Select
            
        Next

 回到顶部