一.用VB創建外部EXCEL對象
大多數大型ActiveX-enabled應用程序和其它ActiveX部件,在它們的對象層次中都提供了一個頂層外部可創建對象。該對象提供了對該層次中其它對象的訪問,並且還提供對整個應用程序起作用的方法和屬性。
例如,每個MicrosoftOffice應用程序提供一個頂層Application對象。下面語句顯示了對Microsoftoffice/9.shtml'target='_blank'class='article'>Excel的Application對象的引用:
DimxlAppAsExcel.Application
SetxlApp=NewExcel.Application
然後,可以用這些變量來訪問在EXCEL應用程序中的從屬對象、以及這些對象的屬性和方法。例如:
SetxlApp=CreateObject("Excel.Application")
‘激活EXCEL應用程序
xlApp.Visible=False‘隱藏EXCEL應用程序窗口
SetxlBook=xlApp.Workbooks.Open(strDestination)
‘打開工作簿,strDestination為一個EXCEL報表文件
SetxlSheet=xlBook.Worksheets(1)
‘設定工作表
二.用EXCEL97設計報表的模版文件
EXCEL97是一個非常優秀的創建報表的工具。它提供的單元格任意合並、拆分和繪圖功能基本上能夠滿足設計所有復雜報表的需求。它對任意一個單元格的格式隨意控制,更為隨心所欲地設計報表提供了強大的支持。
根據用戶提供的報表,我們可以很快在EXCEL裡生成模版文件。所謂生成模版文件只是為了滿足用戶多方面的需求而設計的。也是為了適合報表以後的更改而做的一點預備工作。例如用戶需要打印幾百張職工履歷表,但其格式都是一致的,並且隨著時間和實際情況的變化,表格格式有可能需要改變,我們設計一個模版文件顯然可以“以不變應萬變”了。
生成工作表時我們應當記錄下要填充內容的單元格編號和該單元格內要填充的數據字段。這樣形成一個表格,在寫程序時一目了然。如:
Cell(4,2)職工姓名Cell(6,6)畢業學校
Cell(4,4)職工性別Cell(6,7)所學專業
Cell(4,6)職工民族Cell(6,9)工作時間
(表一)
在程序裡我們當然不要對模版文件進行操作了,我們只需要對模版文件的一個拷貝進行操作就行(這也是我們設計模版文件的一個目的和好處)。如下面的例子:
DimstrSource,strDestinationAsString
strSource=App.Path&"ExcelsRegisterFee.xls"
‘RegisterFee.xls就是一個模版文件
strDestination=App.Path&"ExcelsTemp.xls"
FileCopystrSource,strDestination
‘將模版文件拷貝到一個臨時文件
三.生成工作表內容
有了上述兩步工作的鋪墊,我們下面接著就只要根據(表一)的格式給各單元格賦值了。如:
datPrimaryRS.Recordset.MoveFirst
‘datPrimaryRS為Data控件
IfIsNull(datPrimaryRS.Recordset!姓名)=FalseThen
xlSheet.Cells(4,2)=datPrimaryRS.Recordset!姓名
EndIf
IfIsNull(datPrimaryRS.Recordset!性別)=FalseThen
xlSheet.Cells(4,4)=datPrimaryRS.Recordset!性別
EndIf
IfIsNull(datPrimaryRS.Recordset!民族)=FalseThen
xlSheet.Cells(4,6)=datPrimaryRS.Recordset!民族
EndIf
四.打印報表
生成了工作表後,就可以對EXCEL發出打印指令了。
注意在執行打印操作之前應該對EXCEL臨時文件執行一次保存操作,以免在退出應用程序後EXCEL還提示用戶是否保存已修改的文件,讓用戶覺得莫名其妙。如下語句:
xlBook.Save‘保存文件
xlSheet.PrintOut‘執行打印
xlApp.Quit‘退出EXCEL
至此讀者應該看到,我們設計的報表打印是通過EXCEL程序來後台實現的。用戶根本看不到具體過程,他們只看到一張張漂亮的報表輕易地被打印出來了。