Dim strSource, strDestination As String
strSource = App.Path & "/Excels/RegisterFee.xls"
‘RegisterFee.xls就是一個模版檔案
strDestination = App.Path & "/Excels/Temp.xls"
FileCopy strSource, strDestination
這就是精華了,把模版檔案作好,以後的事情就簡單了。
使用者可是不管你採用了多麼靈活的演算法多麼方便的操作,他們最感興趣的是最後他們出來的報表如何漂亮,出報表的操作如何簡單(最好是一個按鈕解決所有的問題)。筆者在開發資料庫管理系統方面也稍有些經驗,從FoxPro、Delphi、PowerBuilder一直到現在用的VB,都遇到過設計列印報表的問題,這些軟體在設計報表的過程中可謂各有千秋,我這裡不一一細說。我在這裡只向大家介紹一種我迄今為止最為滿意的一種設計列印報表的方法:利用VB操作EXCEL來產生複雜的報表。
---- 一. 用VB建立外部EXCEL對象
---- 大多數大型 ActiveX-enabled 應用程式和其它 ActiveX 組件,在它們的對象層次中都提供了一個頂層外部可建立對象。該對象提供了對該層次中其它對象的訪問,並且還提供對整個應用程式起作用的方法和屬性。
---- 例如,每個 Microsoft Office 應用程式提供一個頂層 Application 對象。下面語句顯示了對Microsoft office/9.shtml' target='_blank' class='article'>Excel的 Application 對象的引用:
Dim xlApp As Excel.Application
Set xlApp = New Excel.Application
---- 然後,可以用這些變數來訪問在EXCEL應用程式中的從屬對象、以及這些對象的屬性和方法。例如:
Set xlApp = CreateObject("Excel.Application")
‘啟用EXCEL應用程式
xlApp.Visible = False ‘隱藏EXCEL應用程式視窗
Set xlBook = xlApp.Workbooks.Open(strDestination)
‘開啟活頁簿,strDestination為一個EXCEL報表檔案
Set xlSheet = xlBook.Worksheets(1)
‘設定工作表
---- 二. 用EXCEL 97設計報表的模版檔案
---- EXCEL 97是一個非常優秀的建立報表的工具。它提供的儲存格任意合并、拆分和繪圖功能基本上能夠滿足設計所有複雜報表的需求。它對任意一個儲存格的格式隨意控制,更為隨心所欲地設計報表提供了強大的支援。
---- 根據使用者提供的報表,我們可以很快在EXCEL裡產生模版檔案。所謂產生模版檔案只是為了滿足使用者多方面的需求而設計的。也是為了適合報表以後的更改而做的一點預備工作。例如使用者需要列印幾百張職工履曆表,但其格式都是一致的,並且隨著時間和實際情況的變化,表格格式有可能需要改變,我們設計一個模版檔案顯然可以“以不變應萬變”了。
---- 產生工作表時我們應當記錄下要填充內容的儲存格編號和該儲存格內要填充的資料欄位。這樣形成一個表格,在寫程式時一目瞭然。如:
Cell(4,2) 職工姓名 Cell(6,6) 畢業學校
Cell(4,4) 職工性別 Cell(6,7) 所學專業
Cell(4,6) 職工民族 Cell(6,9) 工作時間
(表一)
---- 在程式裡我們當然不要對模版檔案進行操作了,我們只需要對模版檔案的一個拷貝進行操作就行(這也是我們設計模版檔案的一個目的和好處)。如下面的例子:
Dim strSource, strDestination As String
strSource = App.Path & "/Excels/RegisterFee.xls"
‘RegisterFee.xls就是一個模版檔案
strDestination = App.Path & "/Excels/Temp.xls"
FileCopy strSource, strDestination
‘將模版檔案拷貝到一個臨時檔案
---- 三. 產生工作表內容
---- 有了上述兩步工作的鋪墊,我們下面接著就只要根據(表一)的格式給各儲存格賦值了。如:
datPrimaryRS.Recordset.MoveFirst
‘datPrimaryRS為Data控制項
If IsNull(datPrimaryRS.Recordset!姓名) = False Then
xlSheet.Cells(4, 2) = datPrimaryRS.Recordset!姓名
End If
If IsNull(datPrimaryRS.Recordset!性別) = False Then
xlSheet.Cells(4, 4) = datPrimaryRS.Recordset!性別
End If
If IsNull(datPrimaryRS.Recordset!民族) = False Then
xlSheet.Cells(4, 6) = datPrimaryRS.Recordset!民族
End If
………………
---- 四. 列印報表
---- 產生了工作表後,就可以對EXCEL發出列印指令了。
---- 注意在執行列印操作之前應該對EXCEL臨時檔案執行一次儲存操作,以免在退出應用程式後EXCEL還提示使用者是否儲存已修改的檔案,讓使用者覺得莫名其妙。如下語句:
xlBook.Save ‘儲存檔案
xlSheet.PrintOut ‘執行列印
xlApp.Quit ‘退出EXCEL
---- 至此讀者應該看到,我們設計的報表列印是通過EXCEL程式來後台實現的。使用者根本看不到具體過程,他們只看到一張張漂亮的報表輕易地被列印出來了。