A---- 一. 用VB創(chuàng)建外部EXCEL對(duì)象
---- 大多數(shù)大型 ActiveX-enabled 應(yīng)用程序和其它 ActiveX 部件,在它們的對(duì)象層次中都提供了一個(gè)頂層外部可創(chuàng)建對(duì)象。該對(duì)象提供了對(duì)該層次中其它對(duì)象的訪問(wèn),并且還提供對(duì)整個(gè)應(yīng)用程序起作用的方法和屬性。
---- 例如,每個(gè) Microsoft Office 應(yīng)用程序提供一個(gè)頂層 Application 對(duì)象。下面語(yǔ)句顯示了對(duì)Microsoft Excel的 Application 對(duì)象的引用:
Dim xlApp As Excel.Application
Set xlApp = New Excel.Application
---- 然后,可以用這些變量來(lái)訪問(wèn)在EXCEL應(yīng)用程序中的從屬對(duì)象、以及這些對(duì)象的屬性和方法。例如:
Set xlApp = CreateObject("Excel.Application")
‘激活EXCEL應(yīng)用程序
xlApp.Visible = False ‘隱藏EXCEL應(yīng)用程序窗口
Set xlBook = xlApp.Workbooks.Open(strDestination)
‘打開(kāi)工作簿,strDestination為一個(gè)EXCEL報(bào)表文件
Set xlSheet = xlBook.Worksheets(1)
‘設(shè)定工作表
---- 二. 用EXCEL 97設(shè)計(jì)報(bào)表的模版文件
---- EXCEL 97是一個(gè)非常優(yōu)秀的創(chuàng)建報(bào)表的工具。它提供的單元格任意合并、拆分和繪圖功能基本上能夠滿足設(shè)計(jì)所有復(fù)雜報(bào)表的需求。它對(duì)任意一個(gè)單元格的格式隨意控制,更為隨心所欲地設(shè)計(jì)報(bào)表提供了強(qiáng)大的支持。
---- 根據(jù)用戶提供的報(bào)表,我們可以很快在EXCEL里生成模版文件。所謂生成模版文件只是為了滿足用戶多方面的需求而設(shè)計(jì)的。也是為了適合報(bào)表以后的更改而做的一點(diǎn)預(yù)備工作。例如用戶需要打印幾百?gòu)埪毠ぢ臍v表,但其格式都是一致的,并且隨著時(shí)間和實(shí)際情況的變化,表格格式有可能需要改變,我們?cè)O(shè)計(jì)一個(gè)模版文件顯然可以“以不變應(yīng)萬(wàn)變”了。
---- 生成工作表時(shí)我們應(yīng)當(dāng)記錄下要填充內(nèi)容的單元格編號(hào)和該單元格內(nèi)要填充的數(shù)據(jù)字段。這樣形成一個(gè)表格,在寫(xiě)程序時(shí)一目了然。如:
Cell(4,2) 職工姓名 Cell(6,6) 畢業(yè)學(xué)校
Cell(4,4) 職工性別 Cell(6,7) 所學(xué)專業(yè)
Cell(4,6) 職工民族 Cell(6,9) 工作時(shí)間
(表一)
---- 在程序里我們當(dāng)然不要對(duì)模版文件進(jìn)行操作了,我們只需要對(duì)模版文件的一個(gè)拷貝進(jìn)行操作就行(這也是我們?cè)O(shè)計(jì)模版文件的一個(gè)目的和好處)。如下面的例子:
Dim strSource, strDestination As String
strSource = App.Path & "\Excels\RegisterFee.xls"
‘RegisterFee.xls就是一個(gè)模版文件
strDestination = App.Path & "\Excels\Temp.xls"
FileCopy strSource, strDestination
‘將模版文件拷貝到一個(gè)臨時(shí)文件
---- 三. 生成工作表內(nèi)容
---- 有了上述兩步工作的鋪墊,我們下面接著就只要根據(jù)(表一)的格式給各單元格賦值了。如:
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
………………
---- 四. 打印報(bào)表
---- 生成了工作表后,就可以對(duì)EXCEL發(fā)出打印指令了。
---- 注意在執(zhí)行打印操作之前應(yīng)該對(duì)EXCEL臨時(shí)文件執(zhí)行一次保存操作,以免在退出應(yīng)用程序后EXCEL還提示用戶是否保存已修改的文件,讓用戶覺(jué)得莫名其妙。如下語(yǔ)句:
xlBook.Save ‘保存文件
xlSheet.PrintOut ‘執(zhí)行打印
xlApp.Quit ‘退出EXCEL
---- 至此讀者應(yīng)該看到,我們?cè)O(shè)計(jì)的報(bào)表打印是通過(guò)EXCEL程序來(lái)后臺(tái)實(shí)現(xiàn)的。用戶根本看不到具體過(guò)程,他們只看到一張張漂亮的報(bào)表輕易地被打印出來(lái)了。