VFP與 EXCEL
[ 2005-09-22 23:16:38 | 作者:
花狐貍 ]
在 VFP 中控件 Excel 的小小經(jīng)驗(yàn)集
1 獲取工作表名稱
在以下示例中,創(chuàng)建了一個(gè) microsoft excel 實(shí)例,添加了一個(gè)新的工作簿。使用 foreach 語句顯示工作簿中每個(gè)工作表的名稱。此示例要求在運(yùn)行示例的機(jī)器上正確安裝 microsoft excel。
oExcel = CREATE("Excel.Application")
oExcel.Workbooks.ADD
FOR EACH oMyVar IN oExcel.sheets
oMyVar.name
NEXT oMyVar
2 Excel報(bào)表巧生成
巧讓FoxPro數(shù)據(jù)生成Excel報(bào)表
Visual FoxPro是應(yīng)用廣泛的前臺(tái)數(shù)據(jù)庫開發(fā)平臺(tái)之一,因此在我們?nèi)粘9ぷ髦袝r(shí)常會(huì)遇到DBF數(shù)據(jù)文件。然而隨著辦公自動(dòng)化的普及,越來越多的時(shí)候需要將DBF文件轉(zhuǎn)化為Excel電子文檔。常用轉(zhuǎn)化方法是在FoxPro中用Copy命令進(jìn)行格式轉(zhuǎn)化或直接用Excel打開DBF文件。這兩種方式雖然都能達(dá)到目的,卻不能得到格式規(guī)范、可以直接打印輸出的報(bào)表,且輸出的Excel文件中,無法對數(shù)據(jù)類型進(jìn)行有效轉(zhuǎn)換,極易出現(xiàn)數(shù)據(jù)統(tǒng)計(jì)錯(cuò)誤。有沒有更好的方法呢?這里有一個(gè)更加通用的方法,在VFP中調(diào)用Excel,可以由DBF文件直接生成格式如下圖所示一樣復(fù)雜的Excel報(bào)表(如圖1)。 Excel報(bào)表
具體過程如下:
編輯推薦文章
● 新鮮接觸Excel 2000 XP
● Excel 2000公式應(yīng)用的幾條經(jīng)驗(yàn)
● Excel 2000函數(shù)應(yīng)用之信息函數(shù)
假設(shè)我們要將表Agcallop.dbf文件輸出為Excel格式文檔,報(bào)表形如圖1所示。為使通用性更強(qiáng),頁面采用A4紙橫向輸出,默認(rèn)字體為宋體10號(hào),頁腳處添加頁號(hào)。
部分程序代碼如下:
m.outfilename=putfile(‘輸出結(jié)果‘,‘a(chǎn)gcallop‘,‘xls‘)
&&取導(dǎo)出文件名稱
ef=CREATEOBJECT(‘Excel.application‘)
&&調(diào)用Excel程序
ef.Workbooks.add
&&添加工作簿
ef.Worksheets("sheet1").Activate
&&激活第一個(gè)工作表
ef.visible=.t.
&&顯示Excel界面
ef.Cells.Select
&&選擇整張表
ef.Selection.Font.Size = 10
&&設(shè)置整表默認(rèn)字體大小為10
select 0
use agcallop
&&選擇被導(dǎo)出的表
num=reccount()
&&求導(dǎo)出總記錄數(shù)
go top
i=5
ef.range("F1:K1").Select
&&選擇標(biāo)題欄所在單元格
ef.Selection.Merge
&&合并單元格
with ef.range("F1 ")
&&設(shè)置標(biāo)題及字體屬性
.value=‘客戶服務(wù)部業(yè)務(wù)代表工作量情況統(tǒng)計(jì)表‘
.Font.Name="黑體"
.Font.size=18
endwith
ef.Rows(2).RowHeight=1/0.035
&&設(shè)置第二行高度為1cmef.range("H2:O2").Select
&&選定統(tǒng)計(jì)條件欄所在單元格
ef.Selection.Merge
&&合并單元格
ef.range("H2").Font.size=10
ef.range("H2").HorizontalAlignment=4
&&設(shè)置內(nèi)容對齊方式為右對齊,3為居中,2為右對齊
ef.range("H2").value=‘統(tǒng)計(jì)時(shí)間:‘+dtoc(date())+‘ 打印日期:‘+dtoc(date())
ef.Rows("3:4").Select
with ef.Selection
.HorizontalAlignment = 3
&&設(shè)置3、4行為水平對齊
.VerticalAlignment = 2
&&垂直居中
.NumberFormatLocal = "@"
&&設(shè)置3、4行為字符型內(nèi)容
endwith
ef.Range("A3:A4").Select
ef.Selection.Merge
&&縱向合并第一列3、4行
ef.Range("A3").value=‘工號(hào)‘
&&設(shè)置第一列標(biāo)題內(nèi)容
ef.Columns("A").Select
&&整列選擇
ef.Selection.HorizontalAlignment = 3
&&水平居中
ef.Columns("A:B").Select
ef.Selection.NumberFormatLocal = "@"
&&設(shè)置A、B列為字符型內(nèi)容
ef.Range("B3:B4").Select
ef.Selection.Merge
&&縱向合并第二列3、4行
ef.Range("B3").value=‘姓名‘
&&設(shè)置第二列標(biāo)題內(nèi)容
ef.Columns("B").Select
&&整列選擇
ef.Selection.HorizontalAlignment = 3
&&水平居中
ef.Range("C3:E3").Select
&&橫向合并第三行C-E列
ef.Selection.Merge
ef.Range("C3").value=‘話務(wù)總量‘
&&第三行大標(biāo)題為“話務(wù)總量”的列
ef.Range("C4").value=‘電話呼入量‘
&&“話務(wù)總量”下第1個(gè)小標(biāo)題“電話呼入量”
ef.Range("D4").value=‘電話呼出量‘
&&“話務(wù)總量”下第2個(gè)小標(biāo)題“電話呼出量”
ef.Range("E4").value=‘合 計(jì)‘
&&“話務(wù)總量”下第3個(gè)小標(biāo)題“合計(jì)”
ef.Range("F3:H3").Select
ef.Selection.Merge
ef.Range("F3").value=‘話務(wù)總時(shí)間‘
ef.Range("F4").value=‘呼入時(shí)間‘
ef.Range("G4").value=‘呼出時(shí)間‘
ef.Range("H4").value=‘合 計(jì)‘
ef.Range("I3:K3").Select
ef.Selection.Merge
ef.Range("I3").value=‘單個(gè)話務(wù)平均時(shí)間‘
ef.Range("I4").value=‘呼入時(shí)間‘
ef.Range("J4").value=‘呼出時(shí)間‘
ef.Range("K4").value=‘合 計(jì)‘
ef.Range("L3:L4").Select
ef.Selection.Merge
ef.Range("L3").value=‘累計(jì)工作時(shí)間‘
ef.Range("M3:M4").Select
ef.Selection.Merge
ef.Range("M3").value=‘無效時(shí)間‘
ef.Range("N3:N4").Select
ef.Selection.Merge
ef.Range("N3").value=‘錄入量‘
ef.Range("O3:O4").Select
ef.Selection.Merge
ef.Range("O3").value=‘有效時(shí)間比‘
接下來通過scan語句,依次為每一行每一列單元格賦值。為了獲得更好的打印效果,還需進(jìn)行頁面設(shè)置,如標(biāo)題行、頁面居中、橫向排版等,還可以加邊框線。
以上程序在VFP 6+Excel 2000+Windows 2000下調(diào)試通過。實(shí)際應(yīng)用中可根據(jù)需要對各項(xiàng)參數(shù)設(shè)置進(jìn)行相應(yīng)調(diào)整。
3 FOX控制EXCL文件另存為DBF(EXCL后臺(tái)運(yùn)行)
fil=Thisform.List1.Value &&其值為一個(gè)包含路徑的文件名
eole=CREATEOBJECT(‘Excel.application‘)
eole.Workbooks.Open(fil) &&打開文件
eole.Selection.AutoFilter &&關(guān)閉(如果無則打開)自動(dòng)篩選
eole.Range("A1:F1000").Select &&選中從第1行到1000行的前6列數(shù)據(jù)(另存后只有這些數(shù)據(jù))
asfil=STRTRAN(UPPER(STRTRAN(fil,SUBSTR(fil,1,RAT(‘\‘,fil)),‘c:\windows\desktop\cphz\‘)),‘.XLS‘,‘.dbf‘) &&要保存的文件名
IF FILE(asfil)
DELETE FILE &asfil
ENDIF
eole.ActiveWorkbook.SaveAs(asfil,8) &&另存為DBF
eole.ActiveWorkbook.saved=.t. &&不保存當(dāng)前EXCL表
eole.Workbooks.close &&關(guān)閉表
eole.quit &&退出EXCL
RELEASE eole &&釋放變量
雖然用APPEND FROM tx.xls TYPE XL8可以更簡單的追加數(shù)據(jù),但有時(shí)會(huì)導(dǎo)致程序非法錯(cuò)誤退出(不知是不是因?yàn)榉欠ㄗ址?,而且還有一定的限制
4實(shí)用的VFP與EXCEL交互編程
鄒益民
摘要:本文介紹了幾種實(shí)用的VFP與EXCEL交互編程的方法與實(shí)例,將VFP強(qiáng)大的數(shù)據(jù)處理功能與EXCEL優(yōu)異的制表功能有機(jī)地結(jié)合起來,大大增強(qiáng)了軟件的應(yīng)用效果。
關(guān)鍵詞:VFP、EXCEL、DDE、OLE、交互編程。
Some Cross_Programming Methods Between VFP and EXCEL
Zou yiming(Gansu Lanzhou Section of Instruments Lanzhou Petrochemical Staff College)
Abstract: The author introduces us in this paper some practical methods and instance of cross_programming between VFP and EXCEL . It extremely improves their performances by combining VFP‘s data processing functions with EXCEL‘s excellent tabulation functions.
Key Words: VFP、EXCEL、OLE、DDE、Cross-Programming
VFP(Visual Foxpro)是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由于其強(qiáng)大的數(shù)據(jù)處理能力及良好的兼容性,使其成為數(shù)據(jù)庫應(yīng)用程序開發(fā)人員的強(qiáng)有力工具,而EXECL則是一種優(yōu)秀的電子表格處理軟件,在兼容性、操作界面、公式運(yùn)算、圖表等方面有著獨(dú)到的優(yōu)勢。上述兩種軟件在各自的應(yīng)用領(lǐng)域均得到廣泛的應(yīng)用,同時(shí)上述兩種軟件還具有良好的交互編程能力,為兩者相輔相成、取長補(bǔ)短奠定了良好的基礎(chǔ)。
本文將結(jié)合具體實(shí)例介紹幾種VFP與EXCEL交互編程的方法,每種方法雖然實(shí)現(xiàn)手段各異,但功能相仿。其功能可簡述如下:VFP數(shù)據(jù)表“學(xué)生成績表.DBF”中含“學(xué)生姓名”、“語文”、“數(shù)學(xué)”......等字段,示例程序?qū)腅XCEL工作簿“VFP交互.XLS”之工作表“查詢”中用書簽“課程名”指定的單元取得欲查詢的課程名稱,然后在數(shù)據(jù)表“學(xué)生成績表.DBF”中自動(dòng)搜索,以找到該門課程不及格的同學(xué)名單,最后傳送至原EXCEL工作薄形成新的工作表單,同時(shí),新工作表還將以該課程名命名。
下列程序均在VFP5.0與EXCEL97中調(diào)試通過。因篇幅所限,程序中的錯(cuò)誤處理部分略去。
一、EXECL驅(qū)動(dòng)VFP
EXECL內(nèi)置的VBA語言(Visual Basic For Application)為EXECL功能的擴(kuò)展提供了便利的手段,用戶可使用該語言直接驅(qū)動(dòng)VFP完成數(shù)據(jù)檢索等功能。
程序首先生成一個(gè)VFP對象,然后用VFP的DoCmd方法執(zhí)行VFP摸索命令串,其摸索結(jié)果再借助于VFP的DateToClip方法拷貝至剪切板,最后VBA將其粘貼至工作表的正確位置。
Sub FoxTest()
Dim oFox As Object
Dim SLesson As String
Dim SCommand As String
Set oFox = CreateObject("VisualFoxPro.Application") '啟動(dòng)VFP,生成VFP對象
Sheets("查詢").Select
SLesson = Range("課程名") '在名為“課程名”的單元格中得到欲查詢的課程名稱
Sheets.Add '產(chǎn)生新的工作表單
ActiveSheet.Name = Slesson '指定工作表單的名稱與課程名稱相同
SCommand = "SELECT 學(xué)號(hào),語文,數(shù)學(xué) FROM d:\vfp\學(xué)生成績表 WHERE "+ SLesson + "<60 INTO CURSOR TEMP" '形成VFP查詢命令串
oFox.DoCmd Scommand '執(zhí)行VFP命令串
oFox.DataToClip "temp", , 3 '將搜索結(jié)果以文本方式拷貝至剪切板
Range("a1:a1").Select '指向拷貝目標(biāo)區(qū)域左上角單元
ActiveSheet.Paste '粘貼搜索結(jié)果
End Sub
為便于使用,作者在EXECL中自制了一名為“搜索”的工具欄及一名為“開始搜索”的按鈕,并將上述宏程序段與自制按鈕相關(guān)聯(lián),按下此按鈕即可運(yùn)行程序并在EXCEL中得到要求的數(shù)據(jù)。
制作工具欄及按鈕的方法如下:
1. 選“工具”/“自定義”菜單,出現(xiàn)自定義對話框;
2. 選擇“工具欄”頁框,然后按下“新建”按鈕;
3. 在工具欄對話框中輸入“搜索”作為新建工具欄的名稱;
4. 選擇“命令”頁框,在“類別”列表中選“宏”,在“命令”列表中選“自定義按鈕”并將其拖放至新建的“搜索”工具欄;
5. 按下“更新所選內(nèi)容”按鈕,首先在“命名”欄中填入按鈕名稱“開始搜索”,然后選擇“指定宏”,在隨后出現(xiàn)的“指定宏”列表中選擇上述宏程序FoxTest()即可實(shí)現(xiàn)為該宏指定一個(gè)工具欄按鈕。
二、VFP使用OLE功能驅(qū)動(dòng)EXECL
OLE(Object Linking and Embedding)對象鏈接與嵌入,是WINDOWS應(yīng)用程序間相互傳遞和共享數(shù)據(jù)的一種有效方法。VFP借助于OLE不僅可共享其它應(yīng)用程序的數(shù)據(jù),而且還能以對象方式直接控制其它應(yīng)用程序的運(yùn)行,從而進(jìn)一步擴(kuò)展VFP的功能。VFP支持直接在程序中創(chuàng)建、使用和控制OLE對象,實(shí)現(xiàn)OLE自動(dòng)化。作為OLE客戶VFP與作為OLE服務(wù)器的EXCEL具有良好的編程接口,下述程序段用OLE方式實(shí)現(xiàn)所要求的功能。
程序首先生成一個(gè)EXCEL的OLE對象OleApp以便對其進(jìn)行操作,然后利用OLE功能從EXCEL表單中獲取欲查詢的課程名,并控制EXCEL生成新的工作表,VFP的查詢結(jié)果仍然使用剪切板的方式傳遞至EXCEL工作表。
OleApp=CREATEOBJECT("Excel.Application") && 打開EXCEL,產(chǎn)生OLE對象
OleApp.Application.Caption="VFP交互編程" && 指定標(biāo)題欄名稱
OleApp.Application.Visible=.T. && 置EXCEL可見
OleApp.Application.WorkBooks.Open("d:\vfp\VFP交互.xls") && 打開EXCEL工作簿
DO WHILE .T.
WITH OleApp.Application
nAnswer = MESSAGEBOX("開始搜索?", 32+4, "搜索指定數(shù)據(jù)") &&產(chǎn)生信息框
IF (.NOT.(nAnswer=6)) && 如按下“Yes"按鈕,則開始搜索,反之退出
EXIT
ENDIF
.Sheets("查詢").Select && 選擇“查詢”工作表單
SLesson = OleApp.Application.Range("課程名").Value && 得到欲查詢的課程名稱
.Sheets.Add && 新建一工作表單
.ActiveSheet.Name = Slesson && 指定工作表單的名稱
SCommand = "SELECT 學(xué)號(hào),語文,數(shù)學(xué) FROM d:\vfp\學(xué)生成績表 WHERE " +ALLTrim(SLesson) + "<60 INTO CURSOR TEMP" && 形成VFP查詢命令串
&Scommand && 執(zhí)行VFP命令串
_VFP.DataToClip("TEMP",,3) && 將搜索結(jié)果以文本方式拷貝至剪切板
.Range("a1:a1").Select && 指向拷貝目標(biāo)區(qū)域左上角單元
.ActiveSheet.Paste && 粘貼搜索結(jié)果
ENDWITH
ENDDO
OleApp.Quit && 關(guān)閉EXCEL,保存更新后的工作簿文件
****************************************
objexcel.activeworkbook.close(.f.)
那個(gè)是關(guān)閉excel啊~~不是存盤~關(guān)閉了就不能存盤了
5設(shè)置打印參數(shù):
問:用Excel做報(bào)表,可打印時(shí)怎么選擇打印機(jī),即.ActiveWindow.SelectedSheets.PrintOut的參數(shù)有哪些?
答:
expression.PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)
expression 必選。該表達(dá)式返回“應(yīng)用于”列表中的某個(gè)對象。
From Variant 類型,可選。打印的開始頁號(hào)。如果省略該參數(shù),將從起始位置開始打印。
To Variant 類型,可選。打印的終止頁號(hào)。如果省略該參數(shù),將打印至最后一頁。
Copies Variant 類型,可選。要打印的份數(shù)。如果省略該參數(shù),將只打印一份。
Preview Variant 類型,可選。如果為 True 則 Microsoft Excel 打印指定對象之前進(jìn)行打印預(yù)覽。如果為 False,或者省略此參數(shù)則立即打印該對象。
ActivePrinter Variant 類型,可選。 設(shè)置活動(dòng)打印機(jī)的名稱。
PrintToFile Variant 類型,可選。如果為 True 則打印輸出到文件。如果沒有指定 PrToFileName,則 Microsoft Excel 將提示用戶輸入要輸出文件的文件名。
Collate Variant 類型,可選。如果為 True 則逐份打印每份副本。
PrToFileName 可選,Variant 類型。如果將 PrintToFile 設(shè)置為 True,則本參數(shù)指定要打印到的文件名。
說明
From 參數(shù)和 To 參數(shù)所描述的“頁”指的是要打印的頁,并非指定工作表或工作簿中的全部頁。
6如何用編程的方法打開有密碼的Excel文件?
問題:
Excel文件加了密碼,如何在VFP中用編程的方式把密碼輸入,使Excel文件打開
如:
eole=CREATEOBJECT(‘Excel.application‘)
eole.Workbooks.Open("d:\22.xls")
這樣還有一個(gè)密碼的對話框出來,需要輸入密碼才能打開文件。
如何用編程的方法直接打開有密碼的Excel文件?
答:
oEle.Workbooks.Open("d:\22.xls",.f.,.f., ,"123","456")
"123"表示打開權(quán)限的密碼,
"456"表示修改權(quán)限的密碼.
----------------------------------------------
問題一:如何將一個(gè)已知路徑的圖片插入到excel中.
答:
oexcel1.ActiveSheet.Pictures.Insert("圖片文件名")
----------------------------------------------
問題二:能不能指定在某一位置或區(qū)域放置圖片并控制圖片顯示大小呢?
答:
OLEAPP.SHEETS(1).SELECT
oleapp.Range("位置").Select
oleapp.ActiveSheet.Pictures.Insert("圖片文件名")).Select
oleapp.Selection.ShapeRange.LockAspectRatio =.T.
oleapp.Selection.ShapeRange.Height = 57
----------------------------------------------
問題:類型為字符型的字段輸出到excel 中,前面的零被自動(dòng)去掉,例如“009877”變?yōu)?#8220;9877”,怎么解決?
答:
1.在字符串前面加半角單引號(hào)“ ‘ ”
2.
eole.Range("A1:Y1").Select
eole.Selection.NumberFormatLocal = "@"
----------------------------------------------
在 Excel 中插入行和列 :
objExcel.Rows(1).Insert() &&在第一行前面插入一行
objExcel.Columns(2).Insert() &&在第二列前面插入一列
----------------------------------------------
獲取 Excel 記錄數(shù)
loXls = CREATEOBJECT("excel.application")
bookExcel = loXls.APPLICATION.Workbooks.OPEN("f:\pz.xls")
nrows=bookExcel.Worksheets(‘pz‘)
UsedRange =nrows.UsedRange
r = UsedRange.ROWS.COUNT &&行數(shù)
c = UsedRange.COLUMNS.COUNT &&列數(shù)
----------------------------------------------
問:在EXCEL中如何在打開文件的同時(shí)自動(dòng)執(zhí)行一個(gè)宏命令。
答:
只要將宏的命名為 AUTO_OPEN 即可。
如果要在文件關(guān)閉時(shí)運(yùn)行,則命名為auto_close 。
----------------------------------------------
問:在VFP中可以執(zhí)行EXCEL的選擇性粘貼嗎?
.Range("A2").PasteSpecial ("xlPasteValues") && 會(huì)出錯(cuò)
.Range("A2").PasteSpecial (3) && 也會(huì)出錯(cuò)
.Range("A2").PasteSpecial && 只好這樣了
如何才能只粘貼值呢?
=====================================================
答:
xlPasteValues=-4163
oExcel.Range("A1").Select
oExcel.Selection.copy
oExcel.Range("B1")._PasteSpecial(xlPasteValues)
注意:在Excel 中,"xlPasteValues"是一個(gè)常量,它的值是一個(gè)數(shù)值型的:-4163
7--------
1.創(chuàng)建Excel對象
eole=CREATEOBJECT(′Excel.application′)
2.添加新工作簿
eole.Workbooks.add
3.設(shè)置第3個(gè)工作表為激活工作表
eole.Worksheets(″sheet3″).Activate
4.打開指定工作簿
eole.Workbooks.Open(″c:\temp\ll.xls″)
5.顯示Excel窗口
eole.visible=.t.
6.更改Excel標(biāo)題欄
eole.Caption=″VFP應(yīng)用程序調(diào)用Microsoft Excel″
7.給單元格賦值
eole.cells(1,4).value=XM(XM為數(shù)據(jù)庫字段名)
8.設(shè)置指定列的寬度(單位:字符個(gè)數(shù))
eole.ActiveSheet.Columns(1).ColumnWidth=5
9.設(shè)置指定行的高度(單位:磅)
eole.ActiveSheet.Rows(1).RowHeight=1/0.035
(設(shè)定行高為1厘米,1磅=0.035厘米)
10.在第18行之前插入分頁符
eole.Worksheets(″Sheet1″).Rows(18).PageBreak=1
11.在第4列之前刪除分頁符
eole.ActiveSheet.Columns(4).PageBreak=0
12.指定邊框線寬度(Borders參數(shù)如下)
ole.ActiveSheet.Range(″b3:d3″).Borders(2).Weight=3
13.設(shè)置四個(gè)邊框線條的類型
eole.ActiveSheet.Range(″b3:d3″).Borders(2).LineStyle=1
(其中Borders參數(shù):1-左、2-右、3-頂、4-底、5-斜、6-斜/;LineStyle值:1與7-細(xì)實(shí)、2-細(xì)虛、4-點(diǎn)虛、9-雙細(xì)實(shí)線)
14.設(shè)置頁眉
eole.ActiveSheet.PageSetup.CenterHeader=″報(bào)表1″
15.設(shè)置頁腳
eole.ActiveSheet.PageSetup.CenterFooter=″第&P頁″
16.設(shè)置頁眉到頂端邊距為2厘米
eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035
17.設(shè)置頁腳到底邊距為3厘米
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035
18.設(shè)置頂邊距為2厘米
eole.ActiveSheet.PageSetup.TopMargin=2/0.035
19.設(shè)置底邊距為4厘米
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035
20.設(shè)置左邊距為2厘米
veole.ActiveSheet.PageSetup.LeftMargin=2/0.035
21.設(shè)置右邊距為2厘米
eole.ActiveSheet.PageSetup.RightMargin=2/0.035
22.設(shè)置頁面水平居中
eole.ActiveSheet.PageSetup.CenterHorizontally=.t.
23.設(shè)置頁面垂直居中
eole.ActiveSheet.PageSetup.CenterVertically=.t.
24.設(shè)置頁面紙張大小(1-窄行8511 39-寬行1411)
eole.ActiveSheet.PageSetup.PaperSize=1
25.打印單元格網(wǎng)線
eole.ActiveSheet.PageSetup.PrintGridlines=.t.
26.拷貝整個(gè)工作表
eole.ActiveSheet.UsedRange.Copy
27.拷貝指定區(qū)域
eole.ActiveSheet.Range(″A1:E2″).Copy
28.粘貼
eole.WorkSheet(″Sheet2″).Range(″A1″).PasteSpecial
29.在第2行之前插入一行
eole.ActiveSheet.Rows(2).Insert
30.在第2列之前插入一列
eole.ActiveSheet.Columns(2).Insert
31.設(shè)置字體
eole.ActiveSheet.Cells(2,1).Font.Name=″黑體″
32.設(shè)置字體大小
eole.ActiveSheet.Cells(1,1).Font.Size=25
33.設(shè)置字體為斜體
eole.ActiveSheet.Cells(1,1).Font.Italic=.t.
34.設(shè)置整列字體為粗體
eole.ActiveSheet.Columns(1).Font.Bold=.t.
35.清除單元格公式
eole.ActiveSheet.Cells(1,4).ClearContents
36.打印預(yù)覽工作表
eole.ActiveSheet.PrintPreview
37.打印輸出工作表
eole.ActiveSheet.PrintOut
38.工作表另為
eole.ActiveWorkbook.SaveAs(″c:\temp\22.xls″)
39.放棄存盤
eole.ActiveWorkbook.saved=.t.
40.關(guān)閉工作簿
eole.Workbooks.close
41.退出Excel
eole.quit
8將DBF數(shù)據(jù)文件導(dǎo)成excel文件的問題(急,UP有分)
用 copy to EXCEL表名 type xl5
只能導(dǎo)出16383條記錄,超過此數(shù)的用以下方法導(dǎo)出:
方法一:
如果你的數(shù)據(jù)中都是普通的數(shù)值和字符串類型,直接用Excel打開表,然后“另存為”一個(gè)Excel就可以了。
---------------------------------------------------------------
方法二:用代碼導(dǎo)
&& DbfToExcel.PRG
&& 記得要安裝Excel啊,否則不好用
CLOSE DATABASES ALL
SET DATE YMD
SET CENTURY ON
cDbfFile = GETFILE("dbf")
IF EMPTY(cDbfFile)
RETURN
ENDIF
USE (cDbfFile) ALIAS FoxTable IN 0
IF NOT USED("FoxTable")
=MESSAGEBOX("打開表失敗,程序?qū)⒅兄梗?, 16, "Error")
RETURN
ENDIF
cExcelFile = PUTFILE("保存為(&N):",JUSTSTEM(cDbfFile)+".xls","xls")
IF EMPTY(cExcelFile)
CLOSE DATABASES ALL
RETURN
ENDIF
SELECT FoxTable
oExcelSheet = GETOBJECT("","Excel.Sheet") && 產(chǎn)生Excel對象
IF NOT TYPE("oExcelSheet") = "O"
=MESSAGEBOX("Excel對象創(chuàng)建失敗,程序?qū)⒅兄梗?, 16, "Error")
RETURN
ENDIF
oExcelApp = oExcelSheet.Application
oExcelApp.Workbooks.Add()
oExcelApp.ActiveWindow.WindowState=2
oSheet = oExcelApp.ActiveSheet
nFldCount = AFIELDS(aFldList, "FoxTable")
FOR i = 1 TO nFldCount
oSheet.Cells(1,i).Value = aFldList[i, 1]
ENDFOR
cRecc = STR(RECCOUNT("FoxTable"))
SCAN
WAIT WINDOW ALLTRIM(STR(RECNO())) + "/" + cRecc NOWAIT
FOR i = 1 TO nFldCount
vValue = .NULL.
IF AT(aFldList[i, 2], "CDLMNFIBYT") = 0
LOOP
ENDIF
cFldName = aFldList[i, 1]
vValue = EVALUATE(cFldName)
DO CASE
CASE aFldList[i, 2] = "C" && 字符/字符串
vValue = TRIM(vValue)
CASE aFldList[i, 2] = "D" && 日期
vValue = DTOC(vValue)
CASE aFldList[i, 2] = "T" && 日期時(shí)間
vValue = TTOC(vValue)
CASE INLIST(aFldList[i, 2], "N", "F", "I", "B", "Y") && 數(shù)值
CASE aFldList[i, 2] = "L" && 邏輯
CASE aFldList[i, 2] = "M" && 備注型
OTHERWISE
vValue = .NULL.
ENDCASE
IF VARTYPE(vValue) = "C" AND EMPTY(vValue)
LOOP
ENDIF
IF NOT ISNULL(vValue)
oSheet.Cells(RECNO("FoxTable")+1, i).Value = vValue
ENDIF
ENDFOR
ENDSCAN
cChrStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
FOR i = 1 TO nFldCount
cColumn = SUBSTR(cChrStr, INT((i-1)/26), 1) + SUBSTR(cChrStr, IIF(MOD(i, 26)= 0, 26, MOD(i, 26)) , 1)
oSheet.Columns(cColumn + ":" + cColumn).ColumnWidth = 12
IF aFldList[i, 2] = "M"
oSheet.Columns(cColumn + ":" + cColumn).WrapText = .F.
ENDIF
ENDFOR
oExcelApp.ActiveWorkbook.SaveAs(cExcelFile)
oExcelApp.ActiveWorkbook.Close(.F.)
oExcelApp.ActiveWorkbook.Close(.F.)
oExcelApp.Quit
oExcelSheet = .NULL.
oExcelApp = .NULL.
WAIT CLEAR
=MESSAGEBOX("轉(zhuǎn)換完畢!", 64, "OK")
CLOSE DATABASES ALL
程序是用VFP8寫的,在VFP6中也可以,沒有問題。只要能夠執(zhí)行完成,就會(huì)是正確的,行數(shù)只受你安裝的Excel最大行數(shù)限制,至少大于65535行
這個(gè)程序支持所有字段類型,包括MEMO類型字段。
9在用VFP調(diào)用EXCEL時(shí)如何獲取工作表的數(shù)目?
CLEAR
LOCAL lnSheetCount
EOLE=CREATEOBJECT("EXCEL.APPLICATION")&&創(chuàng)建Excel對象
EOLE.WORKBOOKS.OPEN("c:\111\321.xls")&&打開指定工作簿
WITH EOLE
lnSheetCount=.WorkBooks(1).Sheets.Count&&統(tǒng)計(jì)工作表數(shù)量
ENDWITH
‘當(dāng)前EXCEL表中工作表的數(shù)目為:‘+ALLTRIM(STR(lnSheetCount))
FOR EACH oMyVar IN eole.sheets
‘當(dāng)前EXCEL表中工作表的名稱分別為‘+oMyVar.name&&顯示Excel表中所有工作表
NEXT oMyVar
EOLE.WORKBOOKS.CLOSE&&關(guān)閉工作簿
EOLE.QUIT&&退出Excel
10如何將excel導(dǎo)入vf中,用程序!
使用import命令,如:
IMPORT FROM 表1.xls TYPE xl8
將表1.xls導(dǎo)入為表1.dbf
---------------------------------------------------------------
用VFP導(dǎo)入
點(diǎn)擊“文件”->導(dǎo)入->
類型選擇:“Microsoft Excel 5.0 和 97 (XLS)”
來源于選擇:你要導(dǎo)入的Excel文件
工作表:默認(rèn)為Sheet1,如是你要把Excel文件中Sheet2中內(nèi)容導(dǎo)過來,就選擇“Sheet2”
->最后點(diǎn)擊導(dǎo)入即可。
以上操作相當(dāng)于如下命令操作:
IMPORT FROM 你的表.xls TYPE XL8 SHEET "Sheet2"
有時(shí)需要把Excel表另存為“Microsoft Excel 5.0 和 97 (XLS)” 格式后,再用以上命令進(jìn)行導(dǎo)入。
----------------------------建議---------------------------
導(dǎo)出
copy to 1.xls type xl5
導(dǎo)入
import from 1.lxs type xl8
或
import from 1.lxs type xl5
11如何在VFP編制的程序中,導(dǎo)入EXCEL的數(shù)據(jù)!
點(diǎn)擊“文件”->導(dǎo)入->
類型選擇:“Microsoft Excel 5.0 和 97 (XLS)”
來源于選擇:你要導(dǎo)入的Excel文件
工作表:默認(rèn)為Sheet1,如是你要把Excel文件中Sheet2中內(nèi)容導(dǎo)過來,就選擇“Sheet2”
->最后點(diǎn)擊導(dǎo)入即可。
以上操作相當(dāng)于如下命令操作:
IMPORT FROM 你的表.xls TYPE XL8 SHEET "Sheet2"
-----------
比喻說你的EXCEL中的文件名為:AA.XLS
IMPORT FROM AA TYPE XLS &&注意這個(gè)AA不要與你的數(shù)據(jù)庫中的某一個(gè)表名相同.
USE AA
COPY TO ARRAY MYARRAY
OPEN DATA 你的數(shù)據(jù)庫
USE 你的表名 &&表結(jié)構(gòu)得與你的AA.XLS一樣.
APPEND FROM ARRAY MYARRAY
然后你就可以處理這個(gè)表了.