合并单元格
下面的代码打印订单表,并合并前两列,也就是产品和客户两列:
Dim
doc As
New
PrintDoc
Dim rt As
New
prt.RenderTable
Dim tb As
Table =
Tables("订单")
Dim ColNames As
String()
= New
String(){"产品",
"客户","单价","折扣","数量","金额","日期"}
Dim
MergeCols
As Integer
= 2
'指定要合并的列数
tb.Sort = "产品,客户"
'根据合并列排序
rt.Width = "Auto"
rt.SplitHorzBehavior = prt.SplitBehaviorEnum.SplitIfNeeded
rt.Style.Font = tb.Font
rt.Style.TextAlignVert = prt.AlignVertEnum.Center
rt.RepeatGridLinesVert = True
'换页后重复表格线
For c As
Integer =
0
To ColNames.Length -
1
Dim
lr As
Integer
' 用于保存合并区域的起始行
rt.Cells(0,c).Text
= ColNames(c)
rt.Cells(0,c).Style.TextAlignHorz
= prt.AlignHorzEnum.Center
rt.Cols(c).Width = tb.Cols(ColNames(c)).PrintWidth
If tb.Cols(ColNames(c)).IsNumeric
Orelse
tb.Cols(ColNames(c)).IsDate Then
rt.Cols(c).Style.TextAlignHorz =
prt.AlignHorzEnum.Right
End
If
For r
As
integer =
0
To tb.Rows.Count -
1
If c <= MergeCols
- 1 then
'如果是要合并的列
Dim Merge
As
Boolean =
True
If
r = 0
Then
Merge = False
Else
For n As
Integer =
0
To c
if tb.Rows(r)(ColNames(n)) <> tb.Rows(r -
1)(ColNames(n))
Merge = False
Exit For
End If
Next
End
If
If
Merge Then
rt.Cells(lr,c).SpanRows = rt.Cells(lr,c).SpanRows +
1
Else
rt.Cells(r + 1,
c).Text = tb.Rows(r)(ColNames(c))
rt.Cells(r + 1,
c).VertSplitBehavior = prt.CellSplitBehaviorEnum.Copy '换页
后重复单元格
lr = r + 1
End
If
Else
rt.Cells(r +
1, c).Text =
tb.Rows(r)(ColNames(c))
End
If
Next
Next
rt.Style.Gridlines.All = New prt.Linedef(Color.Gray)
rt.CellStyle.Spacing.All = 0.5
rt.Rows(0).Style.TextAlignHorz
= prt.AlignHorzEnum.Center
rt.RowGroups(0,1).Header
= prt.TableHeaderEnum.All
doc.Body.Children.Add(rt)
doc.Preview()
上面的代码是通用的,要打印其它表格或者合并不同的列时,只需修改下面四行代码:
Dim tb
As Table
= Tables("订单")
Dim ColNames As
String()
= New
String(){"产品",
"客户","单价","折扣","数量","金额","日期"}
Dim
MergeCols
As Integer
= 2
'指定要合并的列数
tb.Sort = "产品,客户"
'根据合并列排序
注意指定要打印列的时候,要合并的列必须位于最前面。
本页地址:http://www.foxtable.com/webhelp/topics/2049.htm