以文本方式查看主题 - 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
|