*!*VFP和Excel都可以用來(lái)進(jìn)行處理數(shù)據(jù)庫(kù)表格,如果巧妙地將二者的優(yōu)點(diǎn)結(jié)合起來(lái),將會(huì)大大方便我們的工作。比如我們可以利用VFP進(jìn)行處理數(shù)據(jù),而利用Excel的預(yù)覽打印功能進(jìn)行報(bào)表打印。這就需要我們?cè)?span lang="EN-US">VFP中直接來(lái)控制Excel。下面就在開(kāi)發(fā)VFP應(yīng)用項(xiàng)目時(shí)對(duì)Excel的控制作一下介紹:
oExcel=Createobject("Excel.application") &&創(chuàng)建Excel對(duì)象
**對(duì)象屬性
oExcel.Visible=.T. &&顯示Excel窗口
oExcel.Caption="VFP應(yīng)用程序調(diào)用Microsoft Excel" &&更改Excel標(biāo)題欄
oExcel.DisplayAlerts = .F. &&關(guān)閉提示和警告消息,運(yùn)行結(jié)束后,應(yīng)將本屬性設(shè)置回 True 值
oExcel.cells(1,4).Value=XM(XM為數(shù)據(jù)庫(kù)字段名) &&給單元格賦值
**Workbooks屬性
oExcel.Workbooks.Add &&添加新工作簿
oExcel.Workbooks.Open("c:\temp\ll.xls") &&打開(kāi)指定工作簿
oExcel.Workbooks.Close &&關(guān)閉工作簿
oExcel.Quit &&退出Excel
Release oExcel &&只有釋放對(duì)象變量, EXCEL進(jìn)程才會(huì)完全關(guān)閉
**Worksheets屬性
oExcel.Worksheets("sheet3").Activate &&設(shè)置第3個(gè)工作表為激活工作表
oExcel.Worksheets("Sheet1").Rows(18).PageBreak=1 &&在第18行之前插入分頁(yè)符
oExcel.WorkSheet("Sheet2").Range("A1").PasteSpecial &&粘貼
**ActiveWorkbook屬性
oExcel.ActiveWorkbook.SaveAs("c:\temp\22.xls") &&工作表另存為
oExcel.ActiveWorkbook.saved=.T. &&放棄存盤(pán),避免出現(xiàn)保存對(duì)話(huà)框
oExcel.ActiveWorkbook.Save &&存盤(pán)
oExcel.ActiveWorkbook.Close(.F.) &&關(guān)閉工作簿
oExcel.ActiveWorkbook.Protect('密碼',.T.,.T.) &&保護(hù)工作薄(第一個(gè).T.:保護(hù)工作簿結(jié)構(gòu),第二個(gè).T.:保護(hù)工作簿窗口)
**ActiveSheet屬性
oExcel.ActiveSheet.UsedRange.Copy &&拷貝整個(gè)工作表
oExcel.ActiveSheet.PrintPreview &&打印預(yù)覽工作表
oExcel.ActiveSheet.PrintOut &&打印輸出工作表
oExcel.ActiveSheet.Protect('密碼',.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.) &&保護(hù)工作表
oExcel.ActiveSheet.Protection.AllowEditRanges.Add("區(qū)域3",oExcel.ActiveSheet.Range("A2:D5")) &&設(shè)置允許用戶(hù)編輯區(qū)域
**表格列屬性
oExcel.ActiveSheet.Columns(2).Insert &&在第2列之前插入一列
oExcel.ActiveSheet.Columns(1).ColumnWidth=5 &&設(shè)置指定列的寬度(單位:字符個(gè)數(shù))
oExcel.ActiveSheet.Columns(4).PageBreak=0 &&在第4列之前刪除分頁(yè)符
oExcel.ActiveSheet.Columns(1).Font.Bold=.T. &&設(shè)置整列字體為粗體
**表格行屬性
oExcel.ActiveSheet.Rows(2).Insert &&在第2行之前插入一行
oExcel.ActiveSheet.Rows(1).RowHeight=1 &&設(shè)置指定行的高度(單位:磅)(設(shè)定行高為 1磅 , 1磅 =0.035厘米)
oExcel.ActiveSheet.Rows("50:100").RowHeight=1 &&設(shè)置第50行至100行的高度
**表格范圍屬性
oExcel.Range("A4:c4").HorizontalAlignment =1 &&水平(1-默認(rèn)、2-靠左、3-居中、4-靠右、5-填充、6=兩端對(duì)齊、7=跨列居中、8=分散對(duì)齊)
oExcel.Range("A4:c4").VerticalAlignment =2 &&垂直(1=靠上、2=居中、3=靠下、4=兩端對(duì)齊、5=分散對(duì)齊)
oExcel.Range("A4:C4").WrapText =.F. &&文本自動(dòng)換行
oExcel.ActiveSheet.Range("A4:B5").Merge=.T. &&合并單元格
oExcel.ActiveSheet.Range("A1:E2").Copy &&拷貝指定區(qū)域
oExcel.ActiveSheet.Range("b3:d3").BorderS(2).Weight=3 &&指定邊框線(xiàn)寬度(Borders參數(shù)如下)
oExcel.ActiveSheet.Range("b3:d3").BorderS(2).LineStyle=1 &&設(shè)置四個(gè)邊框線(xiàn)條的類(lèi)型
&&(其中Borders參數(shù):1-左、2-右、3-頂、4-底、5-斜、6-斜/;LineStyle值:1與7-細(xì)實(shí)、2-細(xì)虛、4-點(diǎn)虛、9-雙細(xì)實(shí)線(xiàn))
**頁(yè)面設(shè)置
WITH oExcel.ActiveSheet.PageSetup
.CenterHeader="報(bào)表1" &&設(shè)置頁(yè)眉
.CenterHeader="&50報(bào)表1" &&設(shè)置頁(yè)眉(字體大小),'&'后面的50可以自定義,表示字體的大小
.CenterFooter="第&P頁(yè)" &&設(shè)置頁(yè)腳(LeftFoot:居左,CenterFooter:居中,RightFooter:居右)
.CenterFooter="&28第&P頁(yè) 共&N頁(yè)" &&設(shè)置頁(yè)腳(字體大小),'&'后面的28可以自定義,表示字體的大小
.HeaderMargin=2/0.035 &&設(shè)置頁(yè)眉到頂端邊距為2厘米
.FooterMargin=3/0.035 &&設(shè)置頁(yè)腳到底邊距為3厘米
.TopMargin=2/0.035 &&設(shè)置頂邊距為2厘米
.BottomMargin=4/0.035 &&設(shè)置底邊距為4厘米
.LeftMargin=2/0.035 &&設(shè)置左邊距為2厘米
.RightMargin=2/0.035 &&設(shè)置右邊距為2厘米
.CenterHorizontally=.T. &&設(shè)置頁(yè)面水平居中
.CenterVertically=.T. &&設(shè)置頁(yè)面垂直居中
.Papersize=1 &&設(shè)置頁(yè)面紙張大小(1-窄行8511 39-寬行1411 9:A4)
.Orientation=1 &&設(shè)置紙張方向(1-豎向,2-橫向)
.PrintTitleRows="$1:$2" &&設(shè)置頂端標(biāo)題行,(每頁(yè)都打印行標(biāo)頭(每頁(yè)頂部出現(xiàn)的單元格的行))
.PrintGridlines=.T. &&打印單元格網(wǎng)線(xiàn)
.Zoom=75 &&設(shè)置縮放比例為75%
ENDWITH
**單元格設(shè)置
WITH oExcel.ActiveSheet.Cells(1,1) &&第一行第一列單元格
.Font.Name="黑體" &&字體名字
.Font.Size=25 &&大小
.Font.Italic=.T. &&為斜體(Bold-粗體)
.Value="數(shù)值" &&給單元格賦值
.ClearContents &&清除單元格公式
ENDWITH
*以下為一些過(guò)程
*檢測(cè)當(dāng)前目錄是否有同名的EXCEL表,如果有先刪除,再另存
If !File(Sys(5) + Curdir() + "result.xls")
oExcel.ActiveWorkbook.SaveAs(Sys(5) + Curdir() + "result.xls")
Else
lcFileName = loExcel.GetSaveAsFilename("result", "Excel (*.xls), *.xls")
If !Empty(lcFileName)
If File(lcFileName)
Delete File (lcFileName)
Endif
oExcel.ActiveWorkbook.SaveAs(lcFileName)
Endif
Endif
*!*拷貝整個(gè)工作表(含格式)
oExcel.activesheet.cells.Copy &&拷貝
oExcel.sheets(1).Select &&選擇第一工作表
oExcel.ActiveSheet.Paste &&粘貼
oExcel.ActiveSheet.Cells(3,4).Value && ActiveSheet 為當(dāng)前的Sheet工作薄名字,Cells(3,4).value 為第3行第4列的值
*!* 顯示某個(gè)單元格的批注內(nèi)容
oExcel=Createobject("Excel.application")
oExcel.Workbooks.Open("d:\TEST\testa.xls")
oExcel.Visible=.T.
oExcel.Range("B5").Comment.Text &&顯示B5單元格的批注內(nèi)容
oExcel.Workbooks.Close
oExcel.Quit
Release oExcel
*!* 將當(dāng)前工作表中的已用區(qū)域(只讀)存入數(shù)組。
strPath='D:\TEST\123.xls'
Local oExcel
oExcel=Createobject("Excel.Application")
oExcel.WorkBooks.Open(strPath)
arrTableInfo=oExcel.ActiveSheet.UsedRange.Value &&將當(dāng)前工作表中的已用區(qū)域(只讀)存入數(shù)組。
oExcel.Quit
Release oExcel
Insert Into 表名 From arrTableInfo
*!* 設(shè)置excel批注的字體(excel 2000實(shí)現(xiàn)了,如下:)
ole.Range("a3").Comment.Shape.Select && 此命令要求批注的 Visible=.t.
ole.Selection.Font.Size=9
ole.Selection.Font.Name="黑體"
ole.Selection.Font.bold=.F.
注:該組命令要求先選中批注框,否則寫(xiě)成 ole.Range("a3").Comment.Shape.Font.Size=9 則出錯(cuò),不知為何!
*!* 如何取得當(dāng)前EXCEL表中工作表的數(shù)目及各工作表的名稱(chēng)?
Clear
Local lnSheetCount
oExcel=Createobject("EXCEL.APPLICATION") &&創(chuàng)建Excel對(duì)象
oExcel.WORKBOOKS.Open("c:\111\321.xls") &&打開(kāi)指定工作簿
With oExcel
lnSheetCount=.WorkBooks(1).Sheets.Count &&統(tǒng)計(jì)工作表數(shù)量
Endwith
'當(dāng)前EXCEL表中工作表的數(shù)目為:'+Alltrim(Str(lnSheetCount))
For Each oMyVar In oExcel.sheets
'當(dāng)前EXCEL表中工作表的名稱(chēng)分別為'+oMyVar.Name &&顯示Excel表中所有工作表
Next oMyVar
oExcel.WORKBOOKS.Close &&關(guān)閉工作簿
oExcel.Quit &&退出Excel
*!* 如何用編程的方法打開(kāi)有密碼的Excel文件?
*Excel文件加了密碼,如何在VFP中用編程的方式把密碼輸入,使Excel文件打開(kāi)
oExcel=Createobject('Excel.application')
oExcel.Workbooks.Open("d:\22.xls")
*!* 這樣還有一個(gè)密碼的對(duì)話(huà)框出來(lái),需要輸入密碼才能打開(kāi)文件。
*!* 如何用編程的方法直接打開(kāi)有密碼的Excel文件?
oExcel.Workbooks.Open("d:\22.xls",.F.,.F., ,"123","456")
"123"表示打開(kāi)權(quán)限的密碼,
"456"表示修改權(quán)限的密碼.
*!* 如何將一個(gè)已知路徑的圖片插入到excel中.
oExcel.ActiveSheet.PictureS.Insert("圖片文件名")
*!* 能不能指定在某一位置或區(qū)域放置圖片并控制圖片顯示大小呢
oExcel.SHEETS(1).Select
oExcel.Range("位置").Select
oExcel.ActiveSheet.PictureS.Insert("圖片文件名")).Select
oExcel.Selection.ShapeRange.LockAspectRatio =.T.
oExcel.Selection.ShapeRange.Height = 57
*!* 類(lèi)型為字符型的字段輸出到excel 中,前面的零被自動(dòng)去掉,例如“ 009877” 變?yōu)?#8220; 9877” ,怎么解決?
*!* 方法1.在字符串前面加半角單引號(hào)“ ' ”,
*!* 例如:
oExcel.Cells(1,1).Value="'0123"
*!* 或用變量
cString="'"+"0123" &&其中0123可以取自表中一個(gè)字段
oExcel.Cells(1,1).Value=cString &&o.Range("A1:A1").value=cString
*!* 方法2.
oExcel.CELLS(1,1).Select &&或eole.Range("A1:E1").Select
oExcel.Selection.NumberFormatLocal = "@" &&把被選定的單元格設(shè)為文本格式
oExcel.Cells(1,1).Value="0123" &&給所選單元格覆值
*!* 獲取 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ù)據(jù)的總行數(shù)
c=UsedRange.Columns.Count &&有數(shù)據(jù)的總列數(shù)
loXls.Workbooks.Close
loXls.Quit
*!* 在EXCEL中如何在打開(kāi)文件的同時(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
oExcel.Range("A1").Copy
oExcel.Range("B3").PasteSpecial(8) &&粘貼行、列寬
oExcel.Range("B3").PasteSpecial(-4122) &&粘貼格式
*!* 本程序通過(guò)將原dbf表拷成excel格式,然后導(dǎo)入并設(shè)置報(bào)表格式
Para tablename
Local hb1 As excel.Application
Wait "正在導(dǎo)出數(shù)據(jù),請(qǐng)稍侯……" Window At 20,30 Timeout 1
bhaveerror=.F. &&定義一個(gè)變量判斷是否發(fā)生錯(cuò)誤
Try
hb1=Createobject("excel.application")
Catch
Messagebox("請(qǐng)檢查你是否已安裝microsoft excel應(yīng)用程序!",0,"提示")
bhaveerror=.T.
Endtry
If bhaveerror=.T.
Return
Endif
If Right(curr_path,1)<>'\'
curr_path=curr_path+"\"
Endif
ctablename=tablename+"_excel"
filepath=curr_path+"temp\sheet1.xls"
*filepath="temp\sheet1.xls"
If !File(filepath)
Messagebox("數(shù)據(jù)源的excel文件未生成,報(bào)表生成被終止!")
Return
Endif
HB1.workbooks.Open(filepath)
HB1.SHEETS("sheet1").Select
hb1.sheets(1).Rows(1).entirerow.Insert
hb1.sheets(1).Rows(1).entirerow.Insert
Sele (ctablename)
nfieldcount=Fcount()
nreccount=Reccount()
hbdygs="A1:"+Chr(nfieldcount+64)+"2"
HB1.Range(hbdygs).Select
****合并兩行作為報(bào)表標(biāo)題*************
HB1.Selection.HorizontalAlignment = 3 &&水平方向 2左對(duì)齊,3居中,4右對(duì)齊
HB1.Selection.VerticalAlignment = 2 &&垂直方向 1靠上,2居中,3靠下
HB1.Selection.WrapText = .F. && ??
HB1.Selection.Orientation = 0 && ??
HB1.Selection.AddIndent = .F. && ??
HB1.Selection.ShrinkToFit = .F. && ??
HB1.Selection.MergeCells = .T. && ??
HB1.Range(hbdygs).FormulaR 1C 1 = "請(qǐng)輸入報(bào)表標(biāo)題"
HB1.Range(hbdygs).Characters.Font.Name = "隸書(shū)"
HB1.Range(hbdygs).Characters.Font.FontStyle = "常規(guī)"
HB1.Range(hbdygs).Characters.Font.ColorIndex = 1 &&字符顏色
***根據(jù)數(shù)據(jù)源表結(jié)構(gòu)的寬度設(shè)置列的寬度********
Copy Stru Exte To temp\term_stru
Sele 0
Use temp\term_stru
Select (ctablename)
For i=1 To nfieldcount
cvalue=Allt(Field(i))
Select term_stru
Loca For Lower(Allt(field_name))==cvalue
If Found()
columnname=Chr(i+64)+":"+Chr(i+64)
hb1.Columns(columnname).ColumnWidth=field_len
Endif
Sele (ctablename)
Endfor
Sele term_stru
Use
activecellname=Chr(nfieldcount+64)+Allt(Str(nreccount+3))
*************設(shè)置數(shù)據(jù)區(qū)域的字體格式***************
HB1.Range("A3:"+activecellname).Characters.Font.Name = "宋體"
HB1.Range("A3:"+activecellname).Characters.Font.Size= 9
HB1.Range("A3:"+activecellname).Select
hb1.Selection.BorderS(1).LineStyle = .T.
hb1.Selection.BorderS(2).linestyle = .T.
hb1.Selection.BorderS(3).linestyle = .T.
hb1.Selection.BorderS(4).linestyle = .T.
hb1.ActiveWorkbook.SaveAs("c:\aa.xls")
hb1.Application.Visible=.T.
* HB1.ACTIVEWORKBOOK.SAVE &&自動(dòng)保存數(shù)據(jù)
* HB1.ACTIVEWORKBOOK.CLOSE &&關(guān)閉當(dāng)前工作簿
* HB1.QUIT
*!* 復(fù)制Sheet工作表
EFILENAME='D:\你的Excel表名.XLS'
oExcel=Createobject("Excel.application")
oExcel.Workbooks.Open("&EFILENAME")
oExcel.Visible=.T.
oExcel.SHEETS(1).Select
oExcel.SHEETS(1).Copy(Null,oExcel.SHEETS(1)) &&&&把第1個(gè)工作表復(fù)制到第1個(gè)工作表之后
oExcel.SHEETS(2).Name='NewSheetName' &&設(shè)置第2個(gè)工作表名稱(chēng)
*!*oExcel.SHEETS(1).COPY(oExcel.SHEETS(1),NULL) &&&&把第1個(gè)工作表復(fù)制到第1個(gè)工作表之前
*!*oExcel.SHEETS(1).NAME='NewSheetName' &&設(shè)置第1個(gè)工作表名稱(chēng)
*!* 如何將DBF中內(nèi)容COPY到EXCEL的指定區(qū)域
例如我有一個(gè)DBF:
Name_F Sl_f
Mike 546
kyle 200
想將這個(gè)內(nèi)容轉(zhuǎn)到EXCEL里面的E1:F2區(qū)域!
Use 表名
_vfp.DataToClip('表名',Reccount(),3) &&將一組記錄作為文本復(fù)制到剪貼板上,3使用制表符分隔字段。
oexl=Createobject('excel.application') &&創(chuàng)建電子表格
oexl.Visible=.T. &&使電子表格可見(jiàn)
oexl.workbooks.Add &&創(chuàng)建工作簿
With oexl
.Range("E1:F2").Select &&根據(jù)你的表中的記錄數(shù)和字段數(shù)調(diào)整此項(xiàng)中的'F2'
.ActiveSheet.Paste
Endwith
聯(lián)系客服