VFP中利用Excel制作數(shù)據(jù)庫(kù)報(bào)表

字號(hào):

編程中主要使用了CreateObject()函數(shù),它可從類(lèi)定義或支持OLE自動(dòng)化的應(yīng)用程序中創(chuàng)建對(duì)象,并將對(duì)象引用賦給變量或數(shù)組元素;若使用用戶自定義類(lèi),則在創(chuàng)建對(duì)象之前,用戶自定義類(lèi)必須先用 Define Class 來(lái)創(chuàng)建,或者用 SET Classlib 打開(kāi)的 .VCX 可視類(lèi)庫(kù)中的類(lèi)。
    假定在一個(gè)VFP項(xiàng)目中有數(shù)據(jù)表:table1.dbf(其中總分暫為0):
    我們希望在VFP的這個(gè)項(xiàng)目運(yùn)行時(shí),調(diào)用Excel來(lái)處理這個(gè)數(shù)據(jù)表,并將處理結(jié)果存盤(pán)。下面的程序excel01.prg實(shí)現(xiàn)了這些要求,程序中用CreateObject()函數(shù)啟動(dòng)Excel,并新建一個(gè)Excel工作簿,然后打開(kāi)數(shù)據(jù)表table1.dbf,取得該表的記錄數(shù),并將表table1.dbf的記錄數(shù)據(jù)逐條送到這個(gè)工作簿的工作表Sheet1中(同時(shí)計(jì)算各記錄的總分),稍加修改(例如設(shè)置字體、字號(hào),畫(huà)表格線等)作出這個(gè)數(shù)據(jù)表的報(bào)表,并用temp.xls文件名存盤(pán)。excel01.prg源程序如下:
    SET DEFAULT TO d:\myvfp\kwsjk
    Clear
    oleApp = CREATEOBJECT(″Excel.Application″)
    oleApp.Visible=.T. && 顯示 Excel。
    oleApp.Workbooks.Add
    ** 設(shè)置單元格的值(報(bào)表標(biāo)題):
    oleApp.Cells(1,1).Value=″貴州大學(xué)計(jì)算機(jī)軟件與理論研究所″
    oleApp.Cells(2,1).Value=″學(xué)生成績(jī)表″
    **
    oleApp.Cells(4,1).Value=″姓名″
    oleApp.Cells(4,2).Value=″數(shù)學(xué)″
    oleApp.Cells(4,3).Value=″網(wǎng)絡(luò)″
    oleApp.Cells(4,4).Value=″數(shù)據(jù)庫(kù)″
    oleApp.Cells(4,5).Value=″英語(yǔ)″
    oleApp.Cells(4,6).Value=″人工智能″
    oleApp.Cells(4,7).Value=″總分″
    ** 打開(kāi)數(shù)據(jù)表,取得該表的記錄數(shù)
    use table1.dbf
    jl=RECCOUNT()-1
    ** 將數(shù)據(jù)表中的記錄數(shù)據(jù)放入Excel工作簿的單元格中
    FOR i=0 TO jl
     go i+1 && 第i+1條記錄
    oleApp.Cells(5+i,1).Value=table1.姓名
     oleApp.Cells(5+i,2).Value=table1.數(shù)學(xué)
    oleApp.Cells(5+i,3).Value=table1.網(wǎng)絡(luò)
     oleApp.Cells(5+i,4).Value=table1.數(shù)據(jù)庫(kù)
    oleApp.Cells(5+i,5).Value=table1.英語(yǔ)
     oleApp.Cells(5+i,6).Value=table1.人工智能
    ** 計(jì)算總分:
    oleApp.Cells(5+i,7).Value=table1.數(shù)學(xué)+table1.網(wǎng)絡(luò)+table1.數(shù)據(jù)庫(kù)+
    table1.英語(yǔ)+table1.人工智能
    ENDFOR
    OleApp.ActiveWorkbook.SaveAs(″D:\myvfp\kwsjk\temp.XLS″)