以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  报表数据格式化  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=189393)

--  作者:cjl333333333
--  发布时间: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
老师您好,我这里面列格式化是那里错了吗。或者报表有什么可以用表数据一样(因为每列属性都有做了定义,但到报表它还是很多位数)。谢谢指教。

--  作者:有点蓝
--  发布时间:2023/11/29 16:22:00
--  
Select Case c
改为
Select Case tb.Cols(c).name

--  作者:cjl333333333
--  发布时间:2023/11/29 16:34:00
--  
还是不行


--  作者:有点蓝
--  发布时间:2023/11/29 16:41:00
--  
给出完整代码!
--  作者:cjl333333333
--  发布时间: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()
老师,我这就想着里面数字列格式化为两位小数。

--  作者:有点蓝
--  发布时间: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