馬 健
(開(kāi)灤一中,河北 開(kāi)灤 063000)
基于OLE的報(bào)表打印方案設(shè)計(jì)與實(shí)現(xiàn)
馬 健
(開(kāi)灤一中,河北 開(kāi)灤 063000)
文章針對(duì)VB6.0開(kāi)發(fā)中遇到的復(fù)雜報(bào)表打印問(wèn)題,提出了一種基于OLE中Excel自動(dòng)化技術(shù)的解決方案。并首先描述了這種解決方案的理論基礎(chǔ),接著又以科研管理信息系統(tǒng)課題錄制作功能的實(shí)現(xiàn)為例介紹了這種解決方案的具體實(shí)現(xiàn)。通過(guò)實(shí)際運(yùn)行科研管理信息系統(tǒng),驗(yàn)證了這種解決方案的可行性。
報(bào)表打??;OLE自動(dòng)化;Excel
用Visual Basic開(kāi)發(fā)應(yīng)用程序時(shí),難免會(huì)遇到打印復(fù)雜型報(bào)表的問(wèn)題,這類(lèi)報(bào)表一般具有復(fù)雜的表頭,表格樣式怪異,每行可能多條記錄,有較復(fù)雜的計(jì)算公式,有大量的文本信息等特點(diǎn)。特別是在大中型管理信息系統(tǒng)的開(kāi)發(fā)過(guò)程中這類(lèi)報(bào)表的設(shè)計(jì)開(kāi)發(fā)往往占據(jù)了開(kāi)發(fā)總量的很大部分工作量。因此,找到一種高效、方便、通用的報(bào)表設(shè)計(jì)方法已迫在眉睫。為了解決上述問(wèn)題,筆者對(duì)于這類(lèi)報(bào)表打印功能的實(shí)現(xiàn)采用了OLE自動(dòng)化技術(shù),通過(guò)對(duì)Excel使用OLE自動(dòng)化,可以在管理信息系統(tǒng)中創(chuàng)建任意外觀的Excel報(bào)表。
OLE代表“對(duì)象連接與嵌入自動(dòng)識(shí)別”,是一項(xiàng)用于實(shí)現(xiàn)和擴(kuò)展動(dòng)態(tài)數(shù)據(jù)交換的技術(shù)。利用OLE技術(shù),在一個(gè)Windows應(yīng)用程序中可以啟動(dòng)其它Windows應(yīng)用程序,也可以顯示和控制其它Windows應(yīng)用程序的數(shù)據(jù),并在創(chuàng)建數(shù)據(jù)的程序中對(duì)它進(jìn)行編輯。OLE自動(dòng)化是應(yīng)用程序向支持OLE自動(dòng)化功能的開(kāi)發(fā)工具、宏語(yǔ)言等展示其OLE對(duì)象的一種工業(yè)標(biāo)準(zhǔn),當(dāng)一個(gè)應(yīng)用程序支持OLE自動(dòng)化時(shí),它所具有的對(duì)象就可以用VB進(jìn)行存取控制,通過(guò)激活對(duì)象上的方法或設(shè)置其屬性來(lái)操縱對(duì)象。目前,除VB以外,支持OLE自動(dòng)化的應(yīng)用程序主要有Microsoft Word、Microsoft Excel等。
下面主要介紹VB所提供的可訪問(wèn)、處理Excel中的工作簿和工作表 VBA(Visual Basic for Application)對(duì)象,共包含四個(gè)對(duì)象:Application對(duì)象,Workbook對(duì)象,Worksheet對(duì)象,Range對(duì)象。下面對(duì)這四個(gè)對(duì)象及其所提供的屬性和方法作簡(jiǎn)要說(shuō)明。
所有程序都可以使用Application對(duì)象,從總體上講,它是指應(yīng)用程序,因此可以作為所有程序?qū)ο蟮娜萜?。Application對(duì)象提供了很多屬性和方法,所有程序都可以訪問(wèn)它們。
VBA允許創(chuàng)建、打開(kāi)、保存、關(guān)閉和刪除工作簿。使用Workbook對(duì)象,可以完成所有這些活動(dòng)。在VBA對(duì)象層中,Workbook對(duì)象位于Application對(duì)象之下。
在VB中要?jiǎng)?chuàng)建新的工作簿,需使用Workbooks集合的Add方法。Add方法的語(yǔ)法如下:
Workbooks.Add([
這里
Worksheet對(duì)象提供了幾個(gè)屬性、方法和事件??梢允褂盟麄兺瓿梢恍┗顒?dòng)。例如添加、刪除和復(fù)制工作表。
使用Worksheet對(duì)象的Add方法,可以在工作部中插入新表。該方法的語(yǔ)法如下:
Worksheets.Add(
如果指定了
在VBA中,使用Range對(duì)象可以訪問(wèn)和引用工作表中的單元格。Range對(duì)象可以是一個(gè)單元格、行、列,也可以是單元格的選項(xiàng)。下面對(duì)Range對(duì)象的幾個(gè)主要方法和屬性作簡(jiǎn)要介紹。
(1)Range方法
Range方法可以識(shí)別單元格或范圍。Range方法的語(yǔ)法如下:
Worksheet.Range(
Worksheet.Range(
在第一個(gè)語(yǔ)法中,
(2)Merge方法Merge方法可以合并指定范圍。Merge方法的語(yǔ)法如下:Worksheet.Range(
(3)Font屬性
可以利用Range對(duì)象的Font屬性的屬性來(lái)定義字體的大小和顏色。Font的屬性包括 Bold、Color、Index、FontStytle等。
下面將以科研管理信息系統(tǒng)打印課題錄功能的實(shí)現(xiàn)為例詳細(xì)說(shuō)明如何利用OLE自動(dòng)化技術(shù)在VB中生成報(bào)表。方法是用VB的OLE自動(dòng)化技術(shù)獲取Excel的控制句柄,從而直接控制Excel的一系列操作,利用微軟強(qiáng)大的電子表格工具Excel來(lái)實(shí)現(xiàn)復(fù)雜的報(bào)表。其步驟為:
(1)創(chuàng)建三個(gè)對(duì)象變量,類(lèi)型分別為Excel.Application、Excel.Workbook和 Excel.Worksheet,分別對(duì)應(yīng)將打開(kāi)的Excel系統(tǒng)、工作簿和工作表;
(2)調(diào)用Excel使其顯示在當(dāng)前窗口中;
(3)對(duì)新的工作表命名;
(4)設(shè)計(jì)表格的外觀;
(5)設(shè)置單元格內(nèi)文字的字體、大小、顯示位置等;
(6)用FOR-NEXT循環(huán)把MSFlexGrid中的記錄逐一寫(xiě)入Excel單元格中;
(7) 畫(huà)出表格輪廓線。
Private Sub Command6_Click()
Dim appexcel As New Excel.Application‘聲明一個(gè)Application對(duì)象
Dim wbmybook As New Excel.Workbook ‘聲明一個(gè)Workbook對(duì)象
Dim wsmysheet As New Excel.Worksheet‘聲明一個(gè)Worksheet對(duì)象
appexcel.Visible = True‘調(diào)用Excel使其顯示在當(dāng)前窗口中
Set wbmybook = appexcel.Workbooks.Add‘創(chuàng)建新的工作簿
Set wsmysheet = appexcel.Worksheets.Add‘創(chuàng)建新的工作表
wsmysheet.Name = "查詢(xún)結(jié)果"‘對(duì)新的工作表命名
wsmysheet.Cells(1, 2).ColumnWidth = 16‘設(shè)置單元格的列寬
wsmysheet.Cells(1, 1).RowHeight = 30‘設(shè)置單元格的行高
wsmysheet.Range("A1:F1").Merge‘合并單元格
wsmysheet.Range("A1:F10").WrapText = True‘設(shè)置單元格內(nèi)文字可自動(dòng)換行
‘設(shè)置單元格內(nèi)文字頂行顯示
wsmysheet.Range("A1:F10").VerticalAlignment =xlTop
‘設(shè)置單元格內(nèi)文字居中顯示
wsmysheet.Range("A1:F1").HorizontalAlignment =xlCenter
‘設(shè)置單元格內(nèi)文字居左顯示
wsmysheet.Range("A2:F10").Select
Selection.HorizontalAlignment = xlLeft
‘設(shè)置字體外觀
wsmysheet.Range("A1:F1").Select
Selection.Font.FontStyle = "Bold"
Selection.Font.Size = 17
‘ 把MSFlexGrid3中的信息寫(xiě)到Excel中
For i = 0 To Form5.MSFlexGrid3.Rows - 1
For j = 0 To Form5.MSFlexGrid3.Cols - 1
wsmysheet.Cells(i + 1, j + 1) =Form5.MSFlexGrid3.TextMatrix(i, j)
Next j
Next I
‘畫(huà)表格
wsmysheet.Range("A1", "F10").Borders.LineStyle =xlContinuous
End Sub
基于以上程序,可得到如圖1的運(yùn)行結(jié)果。
圖1 運(yùn)行結(jié)果
通過(guò)實(shí)際運(yùn)行, OLE自動(dòng)化技術(shù)對(duì)于科研管理信息系統(tǒng)打印課題錄的功能的良好實(shí)現(xiàn)得到了充分驗(yàn)證。由于在科研管理信息系統(tǒng)復(fù)雜報(bào)表的開(kāi)發(fā)過(guò)程中采用了 OLE自動(dòng)化技術(shù),不僅大大提高了整個(gè)系統(tǒng)的開(kāi)發(fā)效率,而且顯著增強(qiáng)了該部分程序的復(fù)用性和可讀性。同時(shí),用戶(hù)可以隨著需求的改變,利用Excel自身的強(qiáng)大功能對(duì)報(bào)表進(jìn)行任意修改,從而提高了整個(gè)系統(tǒng)的靈活性。這種實(shí)現(xiàn)復(fù)雜報(bào)表打印的方法也可以推廣到其它管理信息系統(tǒng)的開(kāi)發(fā)中。但是OLE自動(dòng)化技術(shù)實(shí)現(xiàn)的報(bào)表打印在運(yùn)行速度上仍存在欠缺。
[1] 傅靖,李冬,羅剛君.Excel 2007 VBA開(kāi)發(fā)技術(shù)大全[M].北京:電子工業(yè)出版社,2008.
[2] 巴威爾.F. VB.NET高級(jí)編程[M].北京:清華大學(xué)出版社,2002.
[3] 洛邁克斯.P. VB與VBA技術(shù)手冊(cè)[M].北京:清華大學(xué)出版社,2002.
Method Design and of realization Report Print Based on OLE
s: This paper gives a method which base on Excel Automation to deal with some questions about complex report print. At first we give theory base of the resolving method. And then this paper give an example on the resolving method through the realization of the making tasks function in Scientific Research Management Information System.
Report print;OLE Automation ;Excel
TP319
A
1008-1151(2011)08-0033-02
2011-04-18
馬健,男,開(kāi)灤一中教師。