换页控制

 

上一节用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), "yyyyMMdd") '设置日期格式

            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) '打开文件


本页地址:http://www.foxtable.com/webhelp/topics/6042.htm