VFP數(shù)據(jù)導(dǎo)出到EXCEL技術(shù)._第1頁
VFP數(shù)據(jù)導(dǎo)出到EXCEL技術(shù)._第2頁
免費(fèi)預(yù)覽已結(jié)束,剩余5頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、VFP數(shù)據(jù)導(dǎo)出到EXCEL技術(shù)我們都知道在EXCEL中有很多很多的計(jì)算公式、靈活多變的計(jì)算方式、方 便快捷的圖表處理、 和功能強(qiáng)大的VBA語言,可以說EXCEL可能是最好用的 表格處理軟件。我敢說:微軟的產(chǎn)品中大概就EXCEL最好!但是,怎樣用Foxpro快速產(chǎn)生統(tǒng)計(jì)表,并將數(shù)據(jù)送到Excel表格中,從 而代替Foxpro的報(bào)表工具呢?我們大家都知道,在Visual Foxpro 3.0及以后版本中提供了一個(gè)調(diào)用Ole Automation的函數(shù)CREATEOBJECT用該函數(shù)可以讓Visual Foxpro很方便的 和其它可以提供OleAutomation服務(wù)的程序進(jìn)行通訊。而Excel更是

2、一個(gè)標(biāo) 準(zhǔn)的Ole Automation服務(wù)器程序,我們可以在前端將數(shù)據(jù)傳送到后端的Excel服務(wù)程序,用后端服務(wù)程序進(jìn)行表格處理,從而彌補(bǔ)Visual Foxpro的不足。由于歷史原因,我們作報(bào)表都習(xí)慣用Total、Count、Sum或者直接在報(bào)表 中工具中計(jì)算,速度最快的大概也就是Total了,但不知道還有多少人還在堅(jiān) 持使用Total命令進(jìn)行計(jì)算,有沒有更好的計(jì)算方法呢?當(dāng)然有啦!我在實(shí)際 使用中積累有一定的經(jīng)驗(yàn)但愿能給各位起到小小的啟發(fā)。假設(shè)有一表:Table1是一個(gè)人員檔案,里面的表結(jié)構(gòu)如下: 字段名 類型及長度編號C,2部門C,10姓名C,10性別C,2出生日期D職務(wù)C,10文化程

3、度C,10內(nèi)容大概如下編號部門姓名性別出生日期職務(wù)文化程度1工程部張三男1971-01-11工程師大學(xué)本科2銷售部李四男1967-02-23經(jīng)理大學(xué)本科3工程部王武1954-03-14技術(shù)員大學(xué)???總經(jīng)理室趙潔雅女1975-04-05秘書碩士研究生5銷售部 1977-05-09銷售經(jīng)理高中6工程部大文1969-03-30總工程師大學(xué)專科7銷售部1961-10-10銷售經(jīng)理大學(xué)???總經(jīng)理室莊稼1961-10-10總經(jīng)理大學(xué)??莆也贿^是舉例說明而已。我不知道你們在使用SQL語句時(shí)有沒有用使用函數(shù)的習(xí)慣,反正我是相 當(dāng)愿意在SQL中使用函數(shù), 我認(rèn)為使用函數(shù)的SQL語句雖然語句長一點(diǎn), 但是 可

4、以讓你的程序看起來更清晰、簡潔。說道這里我要感謝當(dāng)初發(fā)明出IIF函數(shù)那位高人,要沒有他(她)我也沒有 機(jī)會在這里羅嗦這么久,在后面提到的快速產(chǎn)生統(tǒng)計(jì)表中將大量的運(yùn)用IIF函 數(shù)。也許你會覺得奇怪,你統(tǒng)計(jì)的時(shí)候用那么多IIF干嗎?別急,下面就讓我 慢慢的告訴你??纯次覀兦懊婷枋龅谋?,我們可能要統(tǒng)計(jì)各個(gè)部門的“性別丨職務(wù)丨文化程 度”等的分布情況,簡單一點(diǎn)我給畫了一個(gè)表個(gè)出來,可能表格更能說明白:各部門人員分布情況表單位:人部門 丨 男丨 女丨 本科 丨 專科丨技術(shù)人員丨管理人員丨秘書工程部丨丨丨丨丨I銷售部丨丨丨丨丨I總經(jīng)理室丨IIIIIIIIIIIIIIIII上面這張表說復(fù)雜也不復(fù)雜, 但是用

5、常給的處理方法可能也要耗掉我們不少 的時(shí)間,因?yàn)槟悴坏貌会槍Σ煌捻?xiàng)目進(jìn)行單獨(dú)反復(fù)的計(jì)算, 可能還要生成一大 堆的臨時(shí)表真煩! 下面的計(jì)算公司可讓你輕松完成上面的表格, 當(dāng)然程序還是要 寫的不可能什么也不動不想就能達(dá)到的,立即輸入下列程序: 第一步:轉(zhuǎn)換Select部門,;iif(性別=男,1,0) as男,;iif(性別=女,1,0) as女,;iif(文化程度=大學(xué)本科,1,0) as大學(xué)本科,;iif(文化程度=大學(xué)???1,0) as大學(xué)???;iif(inlist(職務(wù),工程師,技術(shù)員,總工程師),1,0) as技術(shù)人員,;iif(inlist(職務(wù),總經(jīng)理,經(jīng)理,銷售經(jīng)理),1,0

6、) as管理人員,;iif(inlist(職務(wù),總經(jīng)理,經(jīng)理,銷售經(jīng)理),1,0) as管理人員,;iif(inlist(職務(wù),秘書),1,0) as秘書;from table into cursor query1第二步:轉(zhuǎn)換并計(jì)算Select部門as部門,;sum男)as男,;sum女)as女,;sum(大學(xué)本科)as大學(xué)本科,;TABLE1.DBF當(dāng)然實(shí)際的數(shù)據(jù)應(yīng)該比這里多很多,要不還用統(tǒng)計(jì)干嗎,sum大學(xué)???as大學(xué)???;sum技術(shù)人員)as技術(shù)人員,;sum(管理人員)as管理人員,;sum(管理人員)as管理人員,;sum(秘書)as秘書;from query1 into cur

7、sor query1;group by部門不要以為我把“from query1 into cursor query1”寫錯(cuò)了,這樣寫的語句 確實(shí)可以使用。到這一步,統(tǒng)計(jì)表就計(jì)算出來了,不信用BROWS看看。往下面我們應(yīng)該說 說怎樣把現(xiàn)在統(tǒng)計(jì)出的數(shù)據(jù)輸出到EXCEL中了(當(dāng)然什么樣子的數(shù)據(jù)都可以)首先用CreateObject函數(shù)建立一個(gè)Excel automation對象,程序如下:local excel,odefine windows WaitWin at 0,0 size 10,60 system;font times new roman,12;title 提示 close float z

8、oom &用于處理提示信息的窗口move windows waitWin centeracti windows waitwinset color to w+/nclearexcel=createobject(excel.application)if type(excel)=U &未能產(chǎn)生EXCEL寸象? 啟動EXCEL失敗.release windows WaitWinreturnendifReportTitle=XXXX公司人員分布情況ExcelFile=xls1.xls excel.caption=ReportTitel select query1 if not file(

9、ExcelFile)export to (ExcelFile) type xlsendifexcel.workbooks.open(ExcelFile)o=excel.activeworkbook.activesheet &用寸象代替這么長的一串字o.cells(1,1).value=ReportTitle第一行是標(biāo)題,故從第二行開始scan for recno()1 &每一行?正在將數(shù)據(jù)轉(zhuǎn)換到Excel表格中.,recno()for i=1 to fcount() &每一列fld=field(i)if type(fld)=C&如果字段太寬,Excel可能不能正

10、確接受數(shù)據(jù)o.cells(recno()+3,i).value=trim(&fld)elseo.cells(recno()+3,i).value=&fldendifendforendscano.cells(1,1).selectexcel.ActiveWindow.windowstate=2 excel.ActiveWorkbook.save() excel.visible=.t.clearstartTime=time()set cursor off*等待Excel處理完畢后再繼續(xù)*do while .t.1,4 say 已啟動后臺Excel表格處理程序,處理中.2,4 say

11、 Ctrl+End繼續(xù)處理.4,4 say 開始時(shí)間:?starttime5,4 say 現(xiàn)在時(shí)間:?time()&VFP會在此等待,除非你從EXCEL中退出或按下Ctrl+End鍵if inkey(0.5)=23 or type()=Uexitendifenddoset cursor onrelease o,excelrelease FindWindow?處理完畢.=inkey(0.5)release windows WaitWinend noteVFP調(diào)用EXCELS補(bǔ)充方法佳帆網(wǎng)站工作室 大文 下面是我使用VFP CALL EXCE啲部分例子:這是本人從書本上抄的片斷

12、和我的小小經(jīng)驗(yàn),可以讓你很方便的在VFP中調(diào)用EXCEL所有的例程我都試驗(yàn)過。用Visual Foxpro設(shè)計(jì)用Excel表格的程序 利用OLE Automation設(shè)計(jì)Excel應(yīng)用程序Excel支持的對象說明:(a) VBA對象:對象名稱 意義Application Excel應(yīng)用程序?qū)ο骔orkBooks Excel活頁薄對象(b)所使用的Method對象名稱Method執(zhí)行意義Application Cells設(shè)定或傳回來某個(gè)網(wǎng)格的內(nèi)容Range傳回或設(shè)定某一個(gè)范圍的網(wǎng)格Charts傳回或設(shè)定活頁簿的單一統(tǒng)計(jì)表Quit結(jié)束Excel ApplicationSave激活存儲文件對話框Wo

13、rkBooks Add新增一個(gè)工作簿Charts Add新增一個(gè)統(tǒng)計(jì)圖(c)所使用的Property對象名稱Property設(shè)定意義Application Visible是否現(xiàn)實(shí)再SCREENt .T. , .F.Value傳回或者設(shè)定存儲文件的內(nèi)容ActiveSheet回應(yīng)Excel Application執(zhí)行工作表對象實(shí)例說明:啟動Excel:MyExcel=CreateObject(Excel.Application) &建立Excel對象MyExcel.Visible=.T.&讓Excel對象再屏幕上顯示出來如何增加工作簿:MyExcel.WorkBooks.Add &

14、amp;在Excel對象中增加一份工作簿(WorkBook)如何在工作簿中增加Sheet(工作表)MyExcel.Sheets.Add &增加工作表(在當(dāng)前工作簿中) 如何刪除工作表MyExcel.ActiveWorkBooks.Sheets(1).Delete&把工作簿中的BOO(K 1) 刪除 向指定的工作簿中的工作表(Sheet)中存儲數(shù)據(jù)*Excel.application Object*Excel.application.ActiveWorkBook Property*WorkBOoks Object*WorkBOoks Object的Add Method.*Shee

15、ts對象*Sheets(Index)對象指定索引工作表*Excel.Application對象的Cells Method結(jié)合Value屬性Example:CLEAR ALLSET PATH TO SYS(2004)+SAMPLESDATEUSE CUSTOMERMYEXCEL=CREATEOBJEXT(EXCEL.APPLICATION)MYEXCEL.VISIBLE=.T.MYEXCEL.WORKBOOKS.ADDMYEXCEL.ACTIVEW0RKB00K.SHEETS(1).CELLS(1,1).VA客戶編號MYEXCEL.ACTIVEW0RKB00K.SHEETS(1).CELLS(1

16、,2).VAI公司行號SELECT CUST0MERR=2C=1G0T0 T0PF0R I=1 T0 20MYEXCEL.ACTIVEW0RKB00K.SHEETS(1).CELLS(R,C).VALUE=CUST0MER.CUST_IDMYEXCEL.ACTIVEW0RKB00K.SHEETS(1).CELLS(R,C+1).VALUE=CUST0MER.C0MPANYR=R+1SKIPENDF0R調(diào)整單元格寬度:MYEXCEL.ACTIVEW0RKB00K.SHEETS(1).CELLS(1,1).columnwidth=30調(diào)整單元格對齊方式:MYEXCEL.ACTIVEW0RKB00K

17、.SHEETS(1).CELLS(1,1).horizontalalig=11為默認(rèn)方式,2為左對齊,3為中對齊,4為右對齊。如何將數(shù)據(jù)存儲:MYEXCEL.SAVE()注:可以用Save(FileName)指定預(yù)存儲文件名,則可不用激活SAVE AS窗口如何打印表格:MYEXCEL.ActiveWorkBook.Print0ut &默認(rèn)打印增個(gè)Sheet如何指定打印表格:MYEXCEL.ActiveWorkBook.Print0ut(1,1,1,.T.) &默認(rèn)打印增個(gè)SheetPrint0ut有四個(gè)參數(shù)A.數(shù)值:,表示指定的工作簿中進(jìn)行打印的Sheet的開始編號B.數(shù)值:,表示指定的工作簿中進(jìn)行打印的Sheet的結(jié)束編號C.打印分?jǐn)?shù)D.是否進(jìn)行Preview, .T.,預(yù)覽,.F.打印如何產(chǎn)生統(tǒng)計(jì)圖CURROW=MYEXCEL.ACTIVESHEET.ROWS.COUNTRANGESTRING=A1:+B+ALLTRIM(STR(CURROW)MYEXCEL.RANGE(RANGESTRING).SELECTMYEXCEL.CHARTS.ADD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論