以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助] 报表对齐  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=179227)

--  作者:建筑人生
--  发布时间:2022/8/13 12:15:00
--  [求助] 报表对齐

Dim doc As New PrintDoc \'定义一个报表
\'设置纸张
doc.PageSetting.PaperKind = 9 \'纸张类型改为A4
doc.PageSetting.Landscape = False \'纵向打印
\'设置页边距
Doc.PageSetting.LeftMargin = 10 \'设置左边距
Doc.PageSetting.RightMargin = 5 \'设置右边距
Doc.PageSetting.TopMargin = 5 \'设置上边距
Doc.PageSetting.BottomMargin = 5 \'设置下边距
\'设置页脚
Dim rt2 As New prt.RenderText \'设置文本对象的内容
rt2.Text = "第[PageNo]页,共[PageCount]页" \'设置文本内容
\'rt2.Style.TextAlignHorz = prt.AlignHorzEnum.Right \'靠右对齐
rt2.Style.TextAlignHorz = prt.AlignHorzEnum.Center\'中心对齐
rt2.Style.Borders.Bottom = New prt.LineDef(0, Color.Green) \'设置底边框
rt2.Style.Padding.Bottom = 0.2 \'底端内容缩进0.5毫米
rt2.Style.FontSize = 10 \'字体大小为8磅
\'Doc.PageHeader = rt2 \'作为页眉使用
Doc.PageFooter = rt2\'作为脚使用

Dim rt As New prt.RenderTable() \'定义一个表格对象
doc.Body.Children.Add(rt) \'将表格对象加入到报表中

\'设置列宽
rt.Style.FontSize = 10\'字体大小

rt.Cols(0).Width = 25 \'序号 mm
rt.Cols(3).Width = 25 \'序号
rt.Cols(6).Width = 25 \'序号

rt.Cols(1).Width = 25 \'名称
rt.Cols(4).Width = 25 \'名称
rt.Cols(7).Width = 25 \'名称

rt.Cols(2).Width = 25 \'金额
rt.Cols(5).Width = 25 \'金额
rt.Cols(8).Width = 25 \'金额

rt.Style.GridLines.All = New prt.Linedef \'设置网格线
rt.CellStyle.Spacing.All = 1 \'内容距离网格线1毫米

\'设置主标题
rt.Cells(0, 0).text = "收入及支出报表"
rt.Cells(0, 0).SpanCols = 9 \'合并第一行全部单元格,用于显示主标题

\'设置对齐
rt.Style.TextAlignHorz = prt.AlignHorzEnum.Left\'所有水平左对齐
rt.Style.TextAlignVert = prt.AlignVertEnum.Center \'所有垂直中心对齐
\'例外  金额列水平右对齐
rt.Cols(2).Style.TextAlignHorz = prt.AlignHorzEnum.Right
rt.Cols(5).Style.TextAlignHorz = prt.AlignHorzEnum.Right
rt.Cols(8).Style.TextAlignHorz = prt.AlignHorzEnum.Right
\'例外 前3行水平中心对齐
\'rt.cells(2, 2).Style.TextAlignHorz = prt.AlignHorzEnum.Center
\'rt.cells(2, 5).Style.TextAlignHorz = prt.AlignHorzEnum.Center
\'rt.cells(2, 8).Style.TextAlignHorz = prt.AlignHorzEnum.Center

\'rt.Cells(0, 0).Style.TextAlignHorz = prt.AlignHorzEnum.Center \'主标题居中
rt.Cells(0, 0).Style.Font = New Font("宋体", 16, FontStyle.Bold) \'设置主标题字体

rt.Rows(0).Style.Borders.All = New prt.LineDef("0mm", Color.white) \'去掉第一行的网格线
rt.Rows(0).Style.GridLines.Bottom = New prt.LineDef("0.1mm", Color.black) \'设置底边框

\'合并行设置及赋值
rt.cells(1, 0).SpanCols = 3 \'合并第一行前3个单元格
rt.cells(1, 0).Text = "收入" \'设置第一行第一个单元格的内容
rt.Cells(1, 3).SpanCols = 6 \'合并第一行最后6个单元格
rt.Cells(1, 3).Text = "支出" \'设置第一行第四个单元格的内容

rt.Cells(2, 0).Text = "序号1"
rt.Cells(2, 1).Text = "名称1"
rt.Cells(2, 2).Text = "金额1"

rt.Cells(2, 3).Text = "序号2"
rt.Cells(2, 4).Text = "名称2"
rt.Cells(2, 5).Text = "金额2"

rt.Cells(2, 6).Text = "序号3"
rt.Cells(2, 7).Text = "名称3"
rt.Cells(2, 8).Text = "金额3"

rt.RowGroups(0, 3).Header = prt.TableHeaderEnum.All \'前3行作为表头(从0开始,共3行)
rt.RowGroups(0, 3).Style.TextAlignHorz = prt.AlignHorzEnum.Center\'前3行水平对齐

Dim tb As Table = Tables("主窗口_Tab_收支报表")
Dim ColNames As New List(Of String)
For Each cl As Col In tb.Cols \'排除隐藏列
    If cl.Visible Then
        ColNames.Add(cl.Name)
    End If
Next
For ri As Integer = 0 To tb.Rows.count - 1 \'行循环赋值
    For ci As Integer = 0 To ColNames.Count - 1 \'列循环赋值
        rt.Cells(ri + 3, ci).Text = tb.Rows(ri)(ColNames(ci))
    Next
Next
Doc.Preview() \'预览报表

 

第三行 金额列为什么没有居中



图片点击可在新窗口打开查看此主题相关图片如下:002.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2022/8/13 13:36:45编辑过]

--  作者:有点蓝
--  发布时间:2022/8/13 14:14:00
--  
\'例外  金额列水平右对齐
rt.Cols(2).Style.TextAlignHorz = prt.AlignHorzEnum.Right
rt.Cols(5).Style.TextAlignHorz = prt.AlignHorzEnum.Right
rt.Cols(8).Style.TextAlignHorz = prt.AlignHorzEnum.Right
--  作者:建筑人生
--  发布时间:2022/8/13 15:07:00
--  
后面重新头对齐了啊,只有金额列没对齐,其他都居中对齐了

rt.RowGroups(0, 3).Header = prt.TableHeaderEnum.All \'前3行作为表头(从0开始,共3行)
rt.RowGroups(0, 3).Style.TextAlignHorz = prt.AlignHorzEnum.Center\'前3行水平对齐


我只要头中间对齐,其他的右对齐,那要怎么写代码
[此贴子已经被作者于2022/8/13 15:18:41编辑过]

--  作者:有点蓝
--  发布时间:2022/8/13 15:18:00
--  
优先级问题,列的设置优先级高。按单元格逐个设置吧