張浩 寧夏紅寺堡揚(yáng)水管理處
VFP中利用OLE功能驅(qū)動(dòng)EXCEL實(shí)現(xiàn)復(fù)雜報(bào)表
張浩 寧夏紅寺堡揚(yáng)水管理處
介紹了在VFP 中利用OLE功能驅(qū)動(dòng)EXCEL來(lái)制作復(fù)雜報(bào)表的原理,以及通過(guò)VFP 和EXCEL 完成一個(gè)動(dòng)態(tài)報(bào)表任務(wù)的具體實(shí)現(xiàn)過(guò)程,并給出了具體的實(shí)現(xiàn)方法。
VFP;OLE;Excel;復(fù)雜報(bào)表
當(dāng)前比較流行的大型數(shù)據(jù)庫(kù)系統(tǒng)包括Oracle,Sybase,Informix和SQL Server等,小型數(shù)據(jù)庫(kù)系統(tǒng)則包括Visual FoxPro和Access等。嚴(yán)格地將,Visual FoxPro是一種集宿主語(yǔ)言和數(shù)據(jù)庫(kù)為一體的數(shù)據(jù)庫(kù)系統(tǒng),它完全可以作為一種編程語(yǔ)言或數(shù)據(jù)庫(kù)單獨(dú)使用。它作為宿主語(yǔ)言和數(shù)據(jù)庫(kù)的結(jié)合體,為進(jìn)行快速數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)提供了可能。由于各行業(yè)的計(jì)算機(jī)應(yīng)用層次不一,水平高低不同,而且對(duì)小微企業(yè)來(lái)說(shuō)部署大型數(shù)據(jù)庫(kù)系統(tǒng)既不經(jīng)濟(jì),也不現(xiàn)實(shí)。所以小型數(shù)據(jù)庫(kù)系統(tǒng)仍有應(yīng)用空間。這也是低成本信息化中國(guó)發(fā)展戰(zhàn)略的重要組成部分。
Visual FoxPro ,是Microsoft公司從Fox公司的FoxBase數(shù)據(jù)庫(kù)軟件經(jīng)過(guò)數(shù)次改良,并且移植到Windows之后得來(lái)的應(yīng)用程序開(kāi)發(fā)軟件,主要用于開(kāi)發(fā)數(shù)據(jù)管理與運(yùn)算等方面的軟件。VFP是Microsoft公司推出的最新可視化數(shù)據(jù)庫(kù)管理系統(tǒng)平臺(tái),是功能特別強(qiáng)大的32位數(shù)據(jù)庫(kù)管理系統(tǒng)。它提供了功能完備的工具、極其友好的用戶界面、簡(jiǎn)單的數(shù)據(jù)存取方式、獨(dú)一無(wú)二的跨平臺(tái)技術(shù),有良好的兼容性、真正的可編譯性和較強(qiáng)的安全性,是目前最快捷、最實(shí)用的小型數(shù)據(jù)庫(kù)管理系統(tǒng)開(kāi)發(fā)軟件之一。
Visual FoxPro 6.0/9.0及其中文版,是可運(yùn)行于Windows 95/XP和Windows NT/2000平臺(tái)的32位數(shù)據(jù)庫(kù)開(kāi)發(fā)系統(tǒng),它不僅可以簡(jiǎn)化數(shù)據(jù)庫(kù)管理,而且能使應(yīng)用程序的開(kāi)發(fā)流程更為合理。Visual FoxPro使組織數(shù)據(jù)、定義數(shù)據(jù)庫(kù)規(guī)則和建立應(yīng)用程序等工作變得簡(jiǎn)單易行。Visual FoxPro 6.0/9.0還提供了一個(gè)集成化的系統(tǒng)開(kāi)發(fā)環(huán)境,它不僅支持過(guò)程式編程技術(shù),而且在語(yǔ)言方面作了強(qiáng)大的擴(kuò)充,支持面向?qū)ο罂梢暬幊碳夹g(shù),并擁有功能強(qiáng)大的可視化程序設(shè)計(jì)工具,同時(shí)也支持客戶/服務(wù)器程序設(shè)計(jì)和XML與Web服務(wù)。目前,Visual FoxPro 6.0/9.0是用戶收集信息、查詢數(shù)據(jù)、創(chuàng)建集成數(shù)據(jù)庫(kù)系統(tǒng)、進(jìn)行實(shí)用系統(tǒng)開(kāi)發(fā)較為理想的工具軟件。利用可視化的設(shè)計(jì)工具和向?qū)?,用戶可以快速?chuàng)建表單、查詢和打印報(bào)表。
在國(guó)內(nèi)的數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)中經(jīng)常會(huì)遇到使用復(fù)雜報(bào)表的情況,所謂復(fù)雜報(bào)表也就是通常所說(shuō)的中國(guó)式報(bào)表。這種報(bào)表一般具有相對(duì)復(fù)雜的表現(xiàn)形式,而且報(bào)表的格式和內(nèi)容應(yīng)工作的需要經(jīng)常發(fā)生變化。如果僅僅使用VFP語(yǔ)言向?qū)Щ蚓帉?xiě)代碼來(lái)實(shí)現(xiàn)復(fù)雜報(bào)表,將花費(fèi)大量的人力和時(shí)間。針對(duì)這點(diǎn),筆者嘗試?yán)肰FP提供的OLE(Object Linking and Embedding)對(duì)象鏈接與嵌入技術(shù),通過(guò)VFP調(diào)用OLE驅(qū)動(dòng)EXCEL,將報(bào)表內(nèi)容輸出到Excel應(yīng)用程序中,再通過(guò)Excel打印,在制作復(fù)雜報(bào)表方面取得了較好的效果,充分體現(xiàn)了VFP在作為小型數(shù)據(jù)庫(kù)前端開(kāi)發(fā)工具的良好擴(kuò)展性。
1.1 為減輕編程工作量,可在Excel中,制作報(bào)表模板并保存在應(yīng)用程序的相關(guān)目錄中待備用;
1.2 在VFP中通過(guò)數(shù)據(jù)操縱語(yǔ)言的相關(guān)類集獲得報(bào)表所需數(shù)據(jù),將數(shù)據(jù)寫(xiě)入臨時(shí)文件中;
1.3 利用OLE技術(shù),通過(guò)VFP調(diào)用OLE,啟動(dòng)Excel應(yīng)用程序;
1.4 在VFP中,讀取存有報(bào)表所用數(shù)據(jù)的臨時(shí)文件;
1.5 根據(jù)讀取的數(shù)據(jù),通過(guò)VFP 和OLE 編程動(dòng)態(tài)調(diào)用1.1中的報(bào)表模板生成相應(yīng)的報(bào)表,顯示在Excel中;
1.6 在Excel中預(yù)覽,打印報(bào)表;
1.7 退出Excel,返回到VFP中;
其中,第1.2~1.5步是實(shí)現(xiàn)過(guò)程中的關(guān)鍵步驟。
根據(jù)以上思路,結(jié)合實(shí)例,分別在VFP和EXCEL中實(shí)現(xiàn),最后給出我單位調(diào)度日?qǐng)?bào)表的實(shí)現(xiàn)效果圖。
2.1 報(bào)表模板制作
首先在Excel中按照?qǐng)?bào)表格式要求制作好一張空白表,為減少編程工作量,可以將報(bào)表標(biāo)題、報(bào)表頭、行列寬度等按照需要的格式制作好,保存在特定的應(yīng)用程序目錄下待用。由于是Excel的基礎(chǔ)知識(shí),本篇此處不再贅述。
2.2 VFP中實(shí)現(xiàn)方法
VFP中主要實(shí)現(xiàn)步驟為:從數(shù)據(jù)庫(kù)中查詢檢索出數(shù)據(jù),存入臨時(shí)文件。
首先要對(duì)所使用的變量進(jìn)行定義,部分程序代碼如下:
[該段代碼統(tǒng)計(jì)當(dāng)班調(diào)度的機(jī)組投運(yùn)臺(tái)次、投運(yùn)機(jī)組編號(hào)及運(yùn)行情況、以泵站為單位截至規(guī)定統(tǒng)計(jì)時(shí)間段內(nèi)的機(jī)組累計(jì)運(yùn)行時(shí)間等信息]
**統(tǒng)計(jì)查詢機(jī)組年累計(jì)運(yùn)行時(shí)數(shù)及當(dāng)前運(yùn)行機(jī)組編號(hào)和投用臺(tái)數(shù)
該報(bào)表程序代碼還有很多模塊,限于篇幅不再一一列舉。
2.4 實(shí)現(xiàn)效果
由以上步驟可以實(shí)現(xiàn)如下圖所示的效果報(bào)表(見(jiàn)圖1,部分?jǐn)?shù)據(jù)保密涂黑)。
圖1
筆者介紹了如何在VFP中利用OLE技術(shù),結(jié)合VFP和EXCEL的各自優(yōu)勢(shì)來(lái)制作復(fù)雜報(bào)表的實(shí)現(xiàn)思想和實(shí)現(xiàn)過(guò)程。在開(kāi)發(fā)信息系統(tǒng)的過(guò)程中用該方法可以方便快速的制作復(fù)雜報(bào)表,這也在報(bào)表的數(shù)次修改中深有體會(huì),極大提高了程序開(kāi)發(fā)和維護(hù)的效率。
10.3969/j.issn.1001-8972.2012.03.032