基于VB和EXCEL的報(bào)表設(shè)計(jì)及打印
在現(xiàn)代管理信息系統(tǒng)的開發(fā)中,經(jīng)常涉及到數(shù)據(jù)信息的分析、加工,
最終還需把統(tǒng)計(jì)結(jié)果形成各種形式的報(bào)表提供給領(lǐng)導(dǎo)決策參考,或進(jìn)行外
部交流。在Visual Basic中制作報(bào)表,通常是用數(shù)據(jù)環(huán)境設(shè)計(jì)器(Data
Environment Designer)與數(shù)據(jù)報(bào)表設(shè)計(jì)器(Data Report Designer),或者
使用第三方產(chǎn)品來完成。但對(duì)于大多數(shù)習(xí)慣于Excel報(bào)表的用戶而言,用以
上方法生成的報(bào)表在格式和功能等方面往往不能滿足他們的要求。
由于Excel具有自己的對(duì)象庫(kù),在Visual Basic工程中可以加以引用,
通過對(duì)Excel使用OLE自動(dòng)化,可以創(chuàng)建一些外觀整潔的報(bào)表,然后打印輸
出。這樣實(shí)現(xiàn)了Visual Basi應(yīng)用程序?qū)xcel的控制。本文將針對(duì)一個(gè)具
體實(shí)例,闡述基于VB和EXCEL的報(bào)表設(shè)計(jì)及打印過程。
1)創(chuàng)建Excel對(duì)象
Excel對(duì)象模型包括了128個(gè)不同的對(duì)象,從矩形、文本框等簡(jiǎn)單的對(duì)
象到透視表,圖表等復(fù)雜的對(duì)象。下面簡(jiǎn)單介紹一下其中最重要,也是用
得最多的五個(gè)對(duì)象。
(1)Application對(duì)象
Application對(duì)象處于Excel對(duì)象層次結(jié)構(gòu)的頂層,表示 Excel自身的
運(yùn)行環(huán)境。
(2)Workbook對(duì)象
Workbook對(duì)象直接地處于Application對(duì)象的下層,表示一個(gè)Excel工
作薄文件。
(3)Worksheet對(duì)象
Worksheet對(duì)象包含于Workbook對(duì)象,表示一個(gè)Excel工作表。
(4)Range對(duì)象
Range對(duì)象包含于Worksheet對(duì)象,表示 Excel工作表中的一個(gè)或多個(gè)
單元格。
(5)Cells對(duì)象
Cells對(duì)象包含于Worksheet對(duì)象,表示Excel工作表中的一個(gè)單元格。
如果要啟動(dòng)一個(gè)Excel,使用Workbook和Worksheet對(duì)象,下面的代碼
啟動(dòng)了Excel并創(chuàng)建了一個(gè)新的包含一個(gè)工作表的工作?。?nbsp;
Dim zsbexcel As Excel.Application
Set zsbexcel = New Excel.Application
zsbexcel.Visible = True
如要Excel不可見,可使zsbexcel.Visible = False
zsbexcel.SheetsInNewWorkbook = 1
Set zsbworkbook = zsbexcel.Workbooks.Add
2)設(shè)置單元格和區(qū)域值
要設(shè)置一張工作表中每個(gè)單元格的值,可以使用Worksheet對(duì)象的
Range屬性或Cells屬性。
With zsbexcel.ActiveSheet
.Cells(1, 2).value = "100"
.Cells(2, 2).value = "200"
.Cells(3, 2).value = "=SUM(B1:B2)"
.Range("A3:A9") = "中國(guó)人民解放軍"
End With
要設(shè)置單元格或區(qū)域的字體、邊框,可以利用Range對(duì)象或Cells對(duì)象
的Borders屬性和Font屬性:
With objexcel.ActiveSheet.Range("A2:K9").Borders ‘邊框設(shè)置
.LineStyle = xlBorderLineStyleContinuous
.Weight = xlThin
.ColorIndex = 1
End With
With objexcel.ActiveSheet.Range("A3:K9").Font ‘字體設(shè)置
.Size = 14
.Bold = True
.Italic = True
.ColorIndex = 3
End With
通過對(duì)Excel單元格和區(qū)域值的各種設(shè)置的深入了解,可以創(chuàng)建各種復(fù)
雜、美觀、滿足需要的、具有自己特點(diǎn)的報(bào)表。
3)預(yù)覽及打印
生成所需要的工作表后,就可以對(duì)EXCEL發(fā)出預(yù)覽、打印指令了。
zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait ‘
設(shè)置打印方向
zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4 ‘
設(shè)置打印紙的打下
zsbexcel.Caption = "打印預(yù)覽" ‘設(shè)置預(yù)覽窗口的
標(biāo)題
zsbexcel.ActiveSheet.PrintPreview ‘打印預(yù)覽
zsbexcel.ActiveSheet.PrintOut ‘打印輸出
通過打印方向、打印紙張大小的設(shè)置,不斷進(jìn)行預(yù)覽,直到滿意為止,
最終進(jìn)行打印輸出。
為了在退出應(yīng)用程序后EXCEL不提示用戶是否保存已修改的文件,需使
用如下語(yǔ)句:
zsbexcel.DisplayAlerts = False
zsbexcel.Quit ‘退出EXCEL
zsbexcel.DisplayAlerts = True
如此設(shè)計(jì)的報(bào)表打印是通過 EXCEL程序來后臺(tái)實(shí)現(xiàn)的。對(duì)于使用者來
說,根本看不到具體過程,只看到一張張漂亮的報(bào)表輕易地被打印出來了。
4)具體實(shí)例
下面給出一個(gè)具體實(shí)例,它在window98、Visual Basic 6.0、
Microsoft Office97的環(huán)境下調(diào)試通過。
在VB中啟動(dòng)一個(gè)新的Standard EXE工程,在“工程”菜單的“引用”
選項(xiàng)下引用Excel Object Library;然后在Form中添加一個(gè)命令按鈕
cmdExcel;最后在窗體中輸入如下代碼:
Dim zsbexcel As Excel.Application
Private Sub cmdExcel_Click()
Set zsbexcel = New Excel.Application
zsbexcel.Visible = True
zsbexcel.SheetsInNewWorkbook = 1
Set zsbworkbook = zsbexcel.Workbooks.Add
With zsbexcel.ActiveSheet.Range("A2:C9").Borders ‘邊框設(shè)置
.LineStyle = xlBorderLineStyleContinuous
.Weight = xlThin
.ColorIndex = 1
End With
With zsbexcel.ActiveSheet.Range("A3:C9").Font ‘字體設(shè)置
.Size = 14
.Bold = True
.Italic = True
.ColorIndex = 3
End With
zsbexcel.ActiveSheet.Rows.HorizontalAlignment =
xlVAlignCenter ‘水平居中
zsbexcel.ActiveSheet.Rows.VerticalAlignment =
xlVAlignCenter ‘垂直居中
With zsbexcel.ActiveSheet
.Cells(1, 2).value = "100"
.Cells(2, 2).value = "200"
.Cells(3, 2).value = "=SUM(B1:B2)"
.Cells(1, 3).value = "中國(guó)人民解放軍"
.Range("A3:A9") = "50"
End With
zsbexcel.ActiveSheet.PageSetup.Orientation = xlPortrait ‘
xlLandscape
zsbexcel.ActiveSheet.PageSetup.PaperSize = xlPaperA4
zsbexcel.ActiveSheet.PrintOut
zsbexcel.DisplayAlerts = False
zsbexcel.Quit
zsbexcel.DisplayAlerts = True
Set zsbexcel = Nothing