打印输出
利用PageSetup属性,可进行各种打印设置。如:
Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("D:\Report.xls")
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
With Ws.PageSetup
'设置打印区域
.PrintArea = "A1:H10" '打印工作表的指定区域
.PrintArea = Ws.UsedRange.Address '打印工作表的使用区域
.PrintTitleColumns = Ws.Columns("A:H").Address '打印列标题(在每一页的左边重复出现)
.PrintTitleRows = Ws.Rows(1).Address '打印行标题(在每一页的顶部重复出现)
'设置页面
.PaperSize = MSExcel.XlPaperSize.xlPaperA4 '纸张大小
.LeftMargin = 30 '页面左边距
.RightMargin = 30'页面右边距
.TopMargin = 50 '页面顶部边距
.BottomMargin = 50 '页面底部边距
.HeaderMargin = 40 '页面顶端到页眉的距离
.FooterMargin = 40 '页脚到页面底端的距离
.CenterHorizontally = True '页面水平居中
.CenterVertically = True '页面垂直居中
'设置页眉
.LeftHeader = "打印日期: &D" '左页眉,&D表示日期
.CenterHeader = "&""隶书,常规""&20 数据分析表" '中页眉,并将字体设置为隶书和20号字大小
.RightHeader = "打印者: " & App.UserName '右页眉
'设置页脚
.LeftFooter = "文件: &F &A" '左页脚,&F表示文件名,&A表示工作表名
.CenterFooter = "" '中页脚为空
.RightFooter = "第 &P 页 共 &N 页" '右页脚
'打印模式
.Orientation = MSExcel.xlPageOrientation.xlPortrait '纵向打印
.Orientation = MSExcel.xlPageOrientation.xlLandscape '横向打印
.PrintHeadings = True'打印行号和列标
.PrintGridlines = True '打印网格线
'缩放打印
.Zoom = False'以下设置将缩印在一页内
.FitToPagesWide = 1 '按照1页的宽度打印
.FitToPagesTall = 1 '按照1页的高度打印
End With
App.Visible = True
Ws.PrintPreview
App.Quit
补充说明,Zoom是用于设置打印工作表时的缩放比例,数值在10和400之间。如果本属性设为False,则由FitToPagesWide属性和FitToPagesTall属性的设定值对工作表的缩放进行控制。
预览和打印
- PrintPreview
打印预览。执行该方法时,如果将参数设为False,则不允许在预览时进行打印设置。
如:Ws.PrintPreview(False)
注意,在执行打印预览时,必须先将Application的Visible设置为True!
- PrintOut
直接打印。如,Ws.PrintOut
该方法还可通过设置有关参数来控制打印,如下面的代码就是打印第1-10页,打印份数为3,打印前先预览,指定的打印机为"pdfFactory Pro":
Ws.PrintOut(From:=1,To:=10,Copies:=3,Preview:=True,ActivePrinter:="pdfFactory Pro")
换页打印
利用PageBreak属性可手工控制换页。
如 在工作表的第24行后设置一个手动分页符:
Ws.Rows(25).PageBreak = MSExcel.XlPageBreak.xlPageBreakManual
如 在工作表的第3列左侧设置一个手动分页符:
Ws.Columns(3).PageBreak = MSExcel.XlPageBreak.xlPageBreakManual
清除所有的手动分页符:
Ws.Cells.PageBreak = MSExcel.XlPageBreak.xlPageBreakNone
下面的例子就是对有内容的区域,每打印5行就换页:
Dim App As New MSExcel.Application
Dim Wb As MSExcel.WorkBook = App.WorkBooks.Open("D:\Report.xls")
Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1)
'对A列从65536行开始向上查找,直到找到最后一个非空单元格为止,并得到其行号.也就是有内容的结束行
Dim EndRow As Integer = Ws.Range("A65536").End(MSExcel.XlDirection.xlUp).Row
'对A列从第1行开始向下查找,直到找到最后一个非空单元格为止,并得到其行号.也就是有内容的开始行
Dim FirstRow As Integer = Ws.Range("A1").End(MSExcel.XlDirection.xlDown).Row
'对A列从第1行开始向下查找,直到找到最后一个非空单元格为止,并得到其行号.也就是有内容的开始行
Ws.Cells.PageBreak = MSExcel.XlPageBreak.xlPageBreakNone'清除所有分页符
For i As Integer = FirstRow+6 To EndRow Step 5 '每5行就分页
Ws.Rows(i).PageBreak = MSExcel.XlPageBreak.xlPageBreakManual
Next
App.Visible = True
Ws.PrintPreview
App.Quit