VFP控制EXCEL的常用方法
oExl=CREATEOBJECT('Excel.application') oExl.Visible=.T.
oExl.DefaultSaveFormat=39 oExl.SheetsInNewWorkbook=1 oExl.Workbooks.Open(cXLS)
oExl.WindowState=-4140 &&窗口最小化 oExl.WindowState=-4143 &&窗口正常化 oExl.WindowState=-4147 &&窗口最大化 *------------------------------------------------------*
&&页面设置
oExl.ActiveSheet.PageSetup.PrintTitleRows=\&&打印标题 oExl.ActiveSheet.PageSetup.Orientation=2 &&页面方向:1纵向/2横向 *oExl.ActiveSheet.PageSetup.PaperSize=11 &&纸张尺寸:9-A4/11-A5 oExl.ActiveSheet.PageSetup.TopMargin=0.8/0.035 &&顶边距 oExl.ActiveSheet.PageSetup.BottomMargin=0.8/0.035 &&底边距 oExl.ActiveSheet.PageSetup.LeftMargin=0 &&左边距 oExl.ActiveSheet.PageSetup.RightMargin=0 &&右边距
oExl.ActiveSheet.PageSetup.CenterHorizontally=.T. &&页面居中 oExl.ActiveSheet.PageSetup.HeaderMargin=0.5/0.035 oExl.ActiveSheet.PageSetup.FooterMargin=0.5/0.035
oExl.ActiveSheet.PageSetup.LeftHeader=\表格\”9是字号” oExl.ActiveSheet.PageSetup.CenterHeader=\oExl.ActiveSheet.PageSetup.RightHeader=\oExl.ActiveSheet.PageSetup.LeftFooter=\
oExl.ActiveSheet.PageSetup.CenterFooter=\第&P页,共&N页\
oExl.ActiveSheet.PageSetup.RightFooter=\制表人:'+代码+' 制表时间:\*------------------------------------------------------* &&整体格式设置
oExl.ActiveSheet.Rows.Font.Size=9
oExl.ActiveSheet.Rows.Font.Name='宋体' oExl.ActiveSheet.Rows.RowHeight=0.5/0.035
oExl.ActiveSheet.Rows.NumberFormatLocal=\红色]-0.00\oExl.ActiveSheet.Rows.VerticalAlignment=2 &&单元格内容垂直居中 *------------------------------------------------------* &&获取最大行号和最大列号 Local nMaxRow,nMaxCol
nMaxRow=oExl.ActiveSheet.UsedRange.Rows.Count nMaxCol=oExl.ActiveSheet.UsedRange.Columns.Count &&表头格式设置
oExl.ActiveSheet.Rows(1).Font.Size=16
oExl.ActiveSheet.Rows(1).Font.Bold=.T.
oExl.ActiveSheet.Rows(1).RowHeight=1/0.035 oExl.ActiveSheet.Rows(1).HorizontalAlignment=3 oExl.ActiveSheet.Rows(2).HorizontalAlignment=3 oExl.ActiveSheet.Rows(3).HorizontalAlignment=3 oExl.ActiveSheet.Rows(3).Font.Bold=.T.
oExl.ActiveSheet.Range('A1:'+CHR(96+nMaxCol)+'1').Merge oExl.ActiveSheet.Range('A2:'+CHR(96+nMaxCol)+'2').Merge *------------------------------------------------------*
&&条件格式隐藏0值
oExl.ActiveSheet.UsedRange.FormatConditions.Delete
oExl.ActiveSheet.UsedRange.FormatConditions.Add(1,3,'0')
oExl.ActiveSheet.UsedRange.FormatConditions(1).Font.ColorIndex=2&&文字白色 *------------------------------------------------------*
oExl.ActiveSheet.Range('A1:B1').Interior.ColorIndex=6 *------------------------------------------------------*
&&单元格底纹黄色
oExl.ActiveSheet.Columns.AutoFit &&自动列宽
oExl.ActiveSheet.Range(\ &&边框线
*------------------------------------------------------*
&&自动筛选
IF !oExl.ActiveSheet.AutoFilterMode &&判断是否存在自动筛选 oExl.ActiveSheet.Rows(3).Autofilter &&如果不存在自动筛选,则添加自动筛选 ENDIF
*------------------------------------------------------* &&冻结窗格
oExl.ActiveSheet.Range('D4').Select oExl.ActiveWindow.FreezePanes = .T.
*------------------------------------------------------* *------------------------------------------------------*
&&分类汇总
Local Arry(1),nMaxRow,nMaxCol Arry(1)=5
nMaxRow=oExl.ActiveSheet.UsedRange.Rows.Count nMaxCol=oExl.ActiveSheet.UsedRange.Columns.Count
oExl.ActiveSheet.Range('A3:'+chr(96+nMaxCol)+alltrim(str(nMaxRow))).Subtotal(2,-4157,@Arry,.T.,.F.,.T.) &&按第2列分类汇总数组Arry保存的列 *------------------------------------------------------*
1、对象的创建与关闭
*******************************
oExl=CREATEOBJECT('Excel.application') &&创建Excel对象 oExl.SheetsInNewWorkbook=1 &&新建工作簿默认包含工作表个数
oExl.Workbooks.Add &&新建工作簿,工作表个数由SheetsInNewWorkBooks属性指定
oExl.Workbooks.Open(cXLS,3,.T.) &&打开指定工作簿(更新链接/只读打开)
oExl.Workbooks.Open(cXLS, [UpdateLinks], [ReadOnly], [Format], [Password], [WriteResPassword], [IgnoreReadOnlyRecommended], [Origin], [Delimiter], [Editable], [Notify], [Converter], [AddToMru], [Local], [CorruptLoad])
oExl.Worksheets(cSheet).Activate &&激活工作表Sheet3 oExl.Worksheets(3).Activate &&激活(从左到右)第3个工作表 oExl.WorkSheets.Count &&工作簿中工作表数 oExl.DefaultSaveFormat=39 &&默认格式Excel 5.0 oExl.DisplayAlerts=.F. &&不显示警告信息
oExl.Visible=.T. &&显示Excel窗口 oExl.Visible=.F. &&不显示Excel窗口 oExl.Caption=\标题栏\ &&更改Excel标题栏 oExl.WorkSheet(\ &&粘贴
oExl.Quit &&退出Excel oExl.DisplayRecentFiles=.T. &&是否显示最近打开文档 oExl.RecentFiles.Maximum=4 &&历史最大纪录数 oExl.UserName=\ &&用户名 oExl.StandardFont=\宋体\ &&标准字体 oExl.StandardFontSize=\ &&标准字体大小 oExl.DefaultFilePath=\ &&默认工作目录 oExl.EnableSound=False &&声音反馈 oExl.RollZoom=False &&智能鼠标缩放 oExl.TransitionMenuKey=\ &&Microsoft Office Excel菜单键 oExl.ActiveWorkbook.Password=\
oExl.ActiveWorkbook.WritePassword=\
oExl.ActiveWorkbook.ReadOnlyRecommended=False
oExl.ActiveWorkbook.SetPasswordEncryptionOptions PasswordEncryptionProvider:=\_ PasswordEncryptionAlgorithm:=\ PasswordEncryptionKeyLength:=40 _ , PasswordEncryptionFileProperties:=False
IF oExl.ActiveWorkbook.FileFormat==39 &&格式为Excel 5.0工作簿 ENDIF
oExl.ActiveWorkBook.SaveAs(FileName,FileFormat,PassWord,WriteResPassWord,ReadOnlyRecommended,CreateBackup) &&另存为 &&参数说明
FileName 字符型,指定文件名 FileFormat 数值型,文件格式 -4143 Microsoft Office Excel 11 DBF4 39 Microsoft Excel 5.0/95 43 Microsoft Excel97-Excel2003 & 5.0/95 44 网页Html文件 -4158 文本文件(制表符分隔) PassWord 字符型,只读密码 WriteResPassWord 字符型,写密码
ReadOnlyRecommended逻辑型,建议只读 CreateBackup 逻辑型,自动备份
例如:oExl.ActiveWorkBook.SaveAs(\
oExl.ActiveWorkbook.saved=.T. &&放弃存盘 oExl.ActiveWorkbook.Save &&存盘(自动存盘不提问) oExl.Workbooks.close &&关闭工作簿
3、单元格的设置
*********************************** &&冻结窗格
oExl.ActiveSheet.Range('D4').Select oExl.ActiveWindow.FreezePanes = .T.
&&条件格式设定
oExl.ActiveSheet.Range('A1:H18').FormatConditions.Add(Type,Operator,Formula1,Formula2) Type 类型(1单元格数值,2公式) Operator 操作符(1介于,2不介于,3等于,4不等于,5大于,6小于,7大于等于,8小于等于) Formula1 表达式1 Formula2 表达式2,操作符为1介于或2不介于才有效 &&条件格式例句:数值为0者,文字颜色白色
oExl.ActiveSheet.UsedRange.FormatConditions.Delete
oExl.ActiveSheet.UsedRange.FormatConditions.Add(1,3,'0')
oExl.ActiveSheet.UsedRange.FormatConditions(1).Font.ColorIndex=2&&文字白色 &&编辑
oExl.ActiveSheet.UsedRange.Copy &&拷贝整个工作表 oExl.ActiveSheet.Range(\ &&拷贝指定区域 oExl.ActiveSheet.Columns(\ &&删除列 oExl.ActiveSheet.Columns(\ &&删除列
oExl.ActiveSheet.Rows(1).Insert &&在第1行之前插入一行 oExl.ActiveSheet.Columns(2).Insert &&在第2列之前插入一列 oExl.ActiveSheet.Cells(1,2).Value=\ &&给单元格赋值 oExl.ActiveSheet.Cells(2,2).Value=\ &&给单元格赋值
oExl.ActiveSheet.Cells(1,4).ClearContents &&清除单元格公式 oExl.ActiveSheet.Rows(18).PageBreak=1 &&在第18行之前插入分页符 oExl.ActiveSheet.Columns(4).PageBreak=0 &&在第4列之前删除分页符
oExl.ActiveSheet.Rows(3).AutoFilter &&自动筛选 oExl.ActiveSheet.Cells(1,1).Delete(-4159) &&删除单元格 -4159 右边单元格左移 -4162 下边单元格上移
oExl.Selection.EntireRow.Delete &&所在行整行删除 oExl.Selection.EntireColumn.Delete &&所在列整列删除 oExl.ActiveSheet.Cells(1,1).Insert(-4142) &&插入单元格 -4142 活动单元格下移 -4161 活动单元格右移
oExl.ActiveSheet.Selection.EntireRow.Insert &&插入行 oExl.ActiveSheet.Selection.EntireColumn.Insert &&插入列
&&选择性粘贴
oExl.ActiveSheet.Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Paste 粘贴数据:8列宽,11公式和数值格式,12数值与数值格式,-4104全部,-4123公式,-4163数值,-4122格式, Operation 运算符:-4142无,2加,3减,4乘,5除 SkipBlanks 跳过空白单元:逻辑型 Transpose 转置:逻辑型
-------------------------------------------------- &&排序 成功例句:
oExl.ActiveSheet.Range('A1:'+CHR(96+nMaxCol)+ALLTRIM(STR(nMaxRow))).Sort(oExl.ActiveSheet.Range(CHR(96+ASCAN(Arry,'原币金额'))+'2'),2,,,,,,1) &&按\原币金额\所在列降序排列,有标题
oExl.ActiveSheet.Rows('1:28').Sort Key1:=Range(\ Key2:=Range(\ Key3:=Range(\ Header:=xlYes, OrderCustom:=6, MatchCase:=True, Orientation:=xlTopToBottom, SortMethod:=xlStroke, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal,