張紅元
引 言:在數(shù)據(jù)庫應(yīng)用系統(tǒng)中,需要設(shè)計各種各樣的報表,雖然可以利用數(shù)據(jù)庫系統(tǒng)開發(fā)工具提供的報表工具設(shè)計報表,但制作的報表樣式非常單一或不能生成復(fù)雜的報表。
Microsoft公司的Excel是一個非常優(yōu)秀的表格處理軟件,它為用戶提供了非常豐富的表格處理工具和菜單命令,利用它強大的函數(shù)功能和數(shù)據(jù)分析能力,能生成各種各樣的報表,但需要手工完成,工作量很大。
Visual Foxpro9.0數(shù)據(jù)庫管理系統(tǒng)可以管理各類數(shù)據(jù),擺脫了傳統(tǒng)手工計算、統(tǒng)計等一系列的繁瑣工作,但報表設(shè)計能力較弱。把Visual Foxpro9.0強大的數(shù)據(jù)管理功能和Excel強大的表格處理功能結(jié)合起來,就可以制作復(fù)雜的報表。通過在Visual Foxpro9.0中利用OLE技術(shù),在程序中直接啟動Excel,從數(shù)據(jù)表中接收數(shù)據(jù),并完成報表的打印工作。
一、利用VisualFoxPro9.0提供的報表向?qū)Ш蛨蟊碓O(shè)計器工具設(shè)計報表
1 利用報表向?qū)гO(shè)計報表
報表向?qū)Ч灿?個步驟完成報表設(shè)計:字段選取、分組記錄、選擇報表樣式、定義報表布局、排序記錄、完成等6個步驟。通常情況下,直接使用向?qū)@得的報表樣式比較單一,且不能滿足要求,需要使用報表設(shè)計器進(jìn)一步的修改。
2 利用報表設(shè)計器設(shè)計報表
Visual FoxPro9.0提供的報表設(shè)計器允許用戶通過直觀的操作直接設(shè)計報表,或修改報表向?qū)?chuàng)建的報表。在實際應(yīng)用中,往往通過快速報表或報表向?qū)葎?chuàng)建一個簡單報表,然后再利用報表設(shè)計器進(jìn)行修改。
以上方法創(chuàng)建的報表,在報表樣式和復(fù)雜度上都受到一定的限制。另一方面,通過交互式方法創(chuàng)建的報表不便于編程。下面介紹一種新的方法,利用Visual FoxPro9.0的OLE技術(shù)和Excel設(shè)計復(fù)雜的報表。
二、復(fù)雜報表的設(shè)計
1 設(shè)計原理
利用Visual FoxPro9.0的OLE技術(shù),把Excel當(dāng)作一個對象嵌入到應(yīng)用程序中,通過面向?qū)ο蟪绦蛟O(shè)計來控制Excel對象,將所需要的數(shù)據(jù)輸入到Excel的單元格,再利用Excel強大的表格功能,設(shè)計出所需要的復(fù)雜報表。
程序設(shè)計所需要的對象、屬性和方法程序,如表1~表3所示。
表1 對象集
對象名稱 說明
Application Excel應(yīng)用程序
Workbooks Excel工作薄對象
表2 方法集
對象名 方法 說明
Application Cells 存取或返回某單元格的內(nèi)容
Range 存取或返回某一范圍的單元格
Save 激活存儲文件對話框
Quit 退出ExcelApplication
Workbooks Add 增加一個工作薄
表3 屬性集
對象名 屬性 說明
Application Application Visible屬性值為.T.時,Excel OLE對象允許顯示
Value 存取或返回存儲文件的內(nèi)容
2 具體操作方法
(1)生成Excel對象(Excelobject)
使用CREATEOBJECT( )函數(shù)產(chǎn)生一個OLE對象。語句代碼如下:
Excelobject= CREATEOBJECT(/Excel.Application")&&產(chǎn)生一個Excel OLE對象,并把Excel調(diào)入內(nèi)存。
(2)增加工作簿(Workbooks)
調(diào)用工作簿對象Workbooks的Add方法。語句代碼如下:
Excelobject.Workbooks.Add &&Excel中增加一個新的工作簿,默認(rèn)由3個空白工作表構(gòu)成
(3)向工作表(Worksheets)輸入數(shù)據(jù)
調(diào)用工作表對象Worksheets的方法Cells( ),然后給相應(yīng)單元格的Value屬性賦值。語句代碼如下:
Excelobject.Workbooks(1).Worksheets(1).Cells(i,j).Value=<表達(dá)式>
如果要把數(shù)據(jù)庫表中的數(shù)據(jù)輸入到Excel單元格中,只需先從數(shù)據(jù)庫表中查詢出數(shù)據(jù),然后再按照上面的方法把每條記錄中的字段值賦給相應(yīng)的單元格。示例如下:
要把學(xué)生成績表中的數(shù)據(jù)在Excel表格中顯示,通過以下程序代碼實現(xiàn):
成績表結(jié)構(gòu)如下:
Chengji(學(xué)號,姓名,英語,高數(shù),總分,名次)
Excelobject= CREATEOBJECT("Excel.application")
Excelobject.Visible=.T.&&使Excel可見
Excelobject.Workbooks.Add
Excelobject.Workbooks(1).Worksheets(1).Cells(1,1).Value="學(xué)號"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,2).Value="姓名"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,3).Value="英語"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,4).Value="高數(shù)"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,5).Value="總分"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,6).Value="名次"
Selecte Chengji
H=2
L=1
Go Top
Do While ! eof( )
Excelobject.Workbooks(1).Worksheets(1).Cells(H,l).Value=Chengji.學(xué)號
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+1).Value=Chengji.姓名
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+2).Value=Chengji.英語
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+3).Value=Chengji.高數(shù)
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+4).Value=Chengji.總分
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+5).Value=Chengji.名次
H=H+1
SKIP
Enddo
(4)設(shè)置單元格的格式
數(shù)據(jù)輸入到Excel中后,就可以利用Excel強大的表格功能編輯報表。通過程序代碼可以設(shè)置表格。
(5)打印Excel表格
通過編程實現(xiàn),程序代碼如下:
Excelobject.Workbooks(1).Worksheets(1).Printout() &&打印第一個工作表
(6)工作表的保存
通過編程實現(xiàn)工作表的保存。程序代碼如下:
Excelobject.Save("D:Chengji.xls") &&表示保存到D盤根目錄下,保存的文件名是Chengji.xls
(7)退出Excel
通過編程實現(xiàn),程序代碼如下:
Excelobject.Quit
三、結(jié) 語
重點介紹了在Visual FoxPro9.0中,利用Microsoft OLE技術(shù)和Excel表格處理軟件,通過面向?qū)ο蟪绦蛟O(shè)計生成復(fù)雜的報表。實踐證明,該方法在實際應(yīng)用中非常有效。
參考文獻(xiàn)
[1]史濟民,湯觀全.Visual Foxpro及其應(yīng)用系統(tǒng)開發(fā)[M].北京:清華大學(xué)出版社,2003.
[2]史嘉林.VFP編程技巧研究[J].電腦編程技巧與維護,2012,12.
[3]李雁翎.Visual Foxpro應(yīng)用基礎(chǔ)與面向?qū)ο蟪绦蛟O(shè)計教程[M].北京:高等教育出版社,1999.
[4]朱揚清.VFP與Excel協(xié)同設(shè)計應(yīng)用系統(tǒng)報表研究 [J].電腦知識與技術(shù),2011,20.
[5]衡紅軍,樊瑋.VFP環(huán)境下統(tǒng)計圖繪制方法研究[J].計算機應(yīng)用,2001,21(8):24 26.
[6] 魏評. 基于VFP的遠(yuǎn)程SQL Server數(shù)據(jù)庫報表的設(shè)計 [J]. 計算機與現(xiàn)代化,2013,01.