换页控制
上一节用Word格式输出了订单表,这一节在上一节的基础上做两点改进:
1、每页都要显示列标题。
2、指定每页的行数,并能根据指定的行数自动换页。
参考代码如下,打开CaseStudy目录下的文件"基本功能演示.Table",然后在命令窗口执行:
Dim
dtab
As
Table = Tables("订单")
Dim
cols()
As
String
= {"产品",
"客户",
"单价",
"数量",
"折扣",
"金额",
"日期"}
'定义要输出的列
Dim
widths()
As
Double
= {50, 50, 50, 60, 60, 77, 120}
'定义列宽
Dim wdc As New WordCreator()
Dim TotalCount As Integer '计数器,累计已经处理的总行数
Dim PageCount As Integer '计数器,当前页面已经处理的行数
Dim PageRows As Integer = 40 '每一页可容纳的数据行数
Dim wtb As Word.Objects.RtfTable '定义一个表格变量
While TotalCount < dtab.Rows.Count '遍历所有数据行
If PageCount = 0 Then '如果PageCount等于0,表示这是每页的第一行,需要增加一个新表格
Dim LeftRows = dtab.Rows.Count - TotalCount '计算出未处理的剩余行数
wtb = New Word.Objects.RtfTable(Math.Min(PageRows, LeftRows) + 1, cols.Length) '增加一个新表格,因为有列标题,所以行数加1
wdc.Add(wtb) '将新增的表格添加到文档中
For c As Integer = 0 To cols.Length - 1 '设置列标题
Dim cell As Word.Objects.RtfCell = wtb.Rows(0).Cells(c) '引用单元格
Dim rpg As New Word.Objects.RtfParagraph() '定义一个段落
rpg.Add(New Word.Objects.RtfString(cols(c))) '在段落中增加一个RtfString,内容为列标题
rpg.Alignment = Word.RtfHorizontalAlignment.Center '列标题居中
cell.Width = widths(c) '设置列宽
cell.Content.Add(rpg) '将段落添加到单元格中
cell.SetRectBorder(Word.RtfBorderStyle.Single, color.DarkGray, 1) '设置边框
Next
End If
While PageCount < PageRows AndAlso TotalCount < dtab.Rows.Count
Dim dr As Row = dtab.Rows(TotalCount) '引用订单表的数据行
For c As Integer = 0 To cols.Length - 1 '遍历要输出的列
Dim cname As String = cols(c) '引用列名
If dr.IsNull(cname) Then Continue For '跳过空单元格
Dim cell As Word.Objects.RtfCell = wtb.Rows(PageCount + 1).Cells(c) '引用单元格
Dim rsr As New Word.Objects.RtfString(dr(cname)) '定义一个RtfString,内容默认为订单表中对应列的内容
Dim rpg As New Word.Objects.RtfParagraph() '定义一个段落
rpg.Add(rsr) '将RtfString添加到段落中
Select Case cname
Case "单价", "数量", "折扣", "金额" '如果是这几个数值列
rpg.Alignment = Word.RtfHorizontalAlignment.Right '则元格内容靠右
If cols(c) = "折扣" Then '
rsr.Text = Format(dr(cname), "0.00%") '折扣列用百分比显示
Else
rsr.Text = Format(dr(cname), "0.00") '其他数值列保留两位小数
End If
Case "日期"
rpg.Alignment = Word.RtfHorizontalAlignment.Right '日期列内容靠右
rsr.Text = Format(dr(cname), "yyyy年MM月dd日") '设置日期格式
End Select
cell.Width = widths(c) '设置列宽
cell.Content.Add(rpg) '将段落添加到单元格中
cell.SetRectBorder(Word.RtfBorderStyle.Single, color.DarkGray, 1) '设置边框
Next
PageCount = PageCount + 1 '页计数器加1
TotalCount = TotalCount + 1 '总计数器加1
End While
PageCount = 0 '重置页计数器为0,开始新的一页
If TotalCount < dtab.Rows.Count Then '如果还有剩余行,则另起一页
wdc.NewPage() '注意这里用的是NewPage,不是PageBreak,避免下一页开始位置出现空行
End If
End While
Dim fl As String = "c:\temp\test.docx"
wdc.Save(fl) '保存文件
Process.Start(fl) '打开文件