馬 健
(開灤一中,河北 開灤 063000)
基于OLE的報表打印方案設計與實現
馬 健
(開灤一中,河北 開灤 063000)
文章針對VB6.0開發中遇到的復雜報表打印問題,提出了一種基于OLE中Excel自動化技術的解決方案。并首先描述了這種解決方案的理論基礎,接著又以科研管理信息系統課題錄制作功能的實現為例介紹了這種解決方案的具體實現。通過實際運行科研管理信息系統,驗證了這種解決方案的可行性。
報表打印;OLE自動化;Excel
用Visual Basic開發應用程序時,難免會遇到打印復雜型報表的問題,這類報表一般具有復雜的表頭,表格樣式怪異,每行可能多條記錄,有較復雜的計算公式,有大量的文本信息等特點。特別是在大中型管理信息系統的開發過程中這類報表的設計開發往往占據了開發總量的很大部分工作量。因此,找到一種高效、方便、通用的報表設計方法已迫在眉睫。為了解決上述問題,筆者對于這類報表打印功能的實現采用了OLE自動化技術,通過對Excel使用OLE自動化,可以在管理信息系統中創建任意外觀的Excel報表。
OLE代表“對象連接與嵌入自動識別”,是一項用于實現和擴展動態數據交換的技術。利用OLE技術,在一個Windows應用程序中可以啟動其它Windows應用程序,也可以顯示和控制其它Windows應用程序的數據,并在創建數據的程序中對它進行編輯。OLE自動化是應用程序向支持OLE自動化功能的開發工具、宏語言等展示其OLE對象的一種工業標準,當一個應用程序支持OLE自動化時,它所具有的對象就可以用VB進行存取控制,通過激活對象上的方法或設置其屬性來操縱對象。目前,除VB以外,支持OLE自動化的應用程序主要有Microsoft Word、Microsoft Excel等。
下面主要介紹VB所提供的可訪問、處理Excel中的工作簿和工作表 VBA(Visual Basic for Application)對象,共包含四個對象:Application對象,Workbook對象,Worksheet對象,Range對象。下面對這四個對象及其所提供的屬性和方法作簡要說明。
所有程序都可以使用Application對象,從總體上講,它是指應用程序,因此可以作為所有程序對象的容器。Application對象提供了很多屬性和方法,所有程序都可以訪問它們。
VBA允許創建、打開、保存、關閉和刪除工作簿。使用Workbook對象,可以完成所有這些活動。在VBA對象層中,Workbook對象位于Application對象之下。
在VB中要創建新的工作簿,需使用Workbooks集合的Add方法。Add方法的語法如下:
Workbooks.Add([
這里
Worksheet對象提供了幾個屬性、方法和事件。可以使用他們完成一些活動。例如添加、刪除和復制工作表。
使用Worksheet對象的Add方法,可以在工作部中插入新表。該方法的語法如下:
Worksheets.Add(
如果指定了
在VBA中,使用Range對象可以訪問和引用工作表中的單元格。Range對象可以是一個單元格、行、列,也可以是單元格的選項。下面對Range對象的幾個主要方法和屬性作簡要介紹。
(1)Range方法
Range方法可以識別單元格或范圍。Range方法的語法如下:
Worksheet.Range(
Worksheet.Range(
在第一個語法中,
(2)Merge方法Merge方法可以合并指定范圍。Merge方法的語法如下:Worksheet.Range(
(3)Font屬性
可以利用Range對象的Font屬性的屬性來定義字體的大小和顏色。Font的屬性包括 Bold、Color、Index、FontStytle等。
下面將以科研管理信息系統打印課題錄功能的實現為例詳細說明如何利用OLE自動化技術在VB中生成報表。方法是用VB的OLE自動化技術獲取Excel的控制句柄,從而直接控制Excel的一系列操作,利用微軟強大的電子表格工具Excel來實現復雜的報表。其步驟為:
(1)創建三個對象變量,類型分別為Excel.Application、Excel.Workbook和 Excel.Worksheet,分別對應將打開的Excel系統、工作簿和工作表;
(2)調用Excel使其顯示在當前窗口中;
(3)對新的工作表命名;
(4)設計表格的外觀;
(5)設置單元格內文字的字體、大小、顯示位置等;
(6)用FOR-NEXT循環把MSFlexGrid中的記錄逐一寫入Excel單元格中;
(7) 畫出表格輪廓線。
Private Sub Command6_Click()
Dim appexcel As New Excel.Application‘聲明一個Application對象
Dim wbmybook As New Excel.Workbook ‘聲明一個Workbook對象
Dim wsmysheet As New Excel.Worksheet‘聲明一個Worksheet對象
appexcel.Visible = True‘調用Excel使其顯示在當前窗口中
Set wbmybook = appexcel.Workbooks.Add‘創建新的工作簿
Set wsmysheet = appexcel.Worksheets.Add‘創建新的工作表
wsmysheet.Name = "查詢結果"‘對新的工作表命名
wsmysheet.Cells(1, 2).ColumnWidth = 16‘設置單元格的列寬
wsmysheet.Cells(1, 1).RowHeight = 30‘設置單元格的行高
wsmysheet.Range("A1:F1").Merge‘合并單元格
wsmysheet.Range("A1:F10").WrapText = True‘設置單元格內文字可自動換行
‘設置單元格內文字頂行顯示
wsmysheet.Range("A1:F10").VerticalAlignment =xlTop
‘設置單元格內文字居中顯示
wsmysheet.Range("A1:F1").HorizontalAlignment =xlCenter
‘設置單元格內文字居左顯示
wsmysheet.Range("A2:F10").Select
Selection.HorizontalAlignment = xlLeft
‘設置字體外觀
wsmysheet.Range("A1:F1").Select
Selection.Font.FontStyle = "Bold"
Selection.Font.Size = 17
‘ 把MSFlexGrid3中的信息寫到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
‘畫表格
wsmysheet.Range("A1", "F10").Borders.LineStyle =xlContinuous
End Sub
基于以上程序,可得到如圖1的運行結果。

圖1 運行結果
通過實際運行, OLE自動化技術對于科研管理信息系統打印課題錄的功能的良好實現得到了充分驗證。由于在科研管理信息系統復雜報表的開發過程中采用了 OLE自動化技術,不僅大大提高了整個系統的開發效率,而且顯著增強了該部分程序的復用性和可讀性。同時,用戶可以隨著需求的改變,利用Excel自身的強大功能對報表進行任意修改,從而提高了整個系統的靈活性。這種實現復雜報表打印的方法也可以推廣到其它管理信息系統的開發中。但是OLE自動化技術實現的報表打印在運行速度上仍存在欠缺。
[1] 傅靖,李冬,羅剛君.Excel 2007 VBA開發技術大全[M].北京:電子工業出版社,2008.
[2] 巴威爾.F. VB.NET高級編程[M].北京:清華大學出版社,2002.
[3] 洛邁克斯.P. VB與VBA技術手冊[M].北京:清華大學出版社,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
馬健,男,開灤一中教師。