回 帖 发 新 帖 刷新版面

主题:新编 VFP 控制 EXCEL 的方法

最近正好有空,看到不少人对VFP控制EXCEL有兴趣,现将上次的“精华贴”重新整理一下,供各位爱好者参考!

1、对象的创建与关闭  *******************************
eole=CREATEOBJECT('Excel.application')                   && 创建Excel对象
eole.Workbooks.add                                       && 添加新工作簿
eole.Worksheets("sheet3").Activate                       && 设置第3个工作表为激活工作表
eole.Workbooks.Open("D:\ABC\11.xls")                     && 打开指定工作簿
eole.visible=.t.                                         && 显示Excel窗口
eole.visible=.F.                                         && 不显示Excel窗口
eole.Caption="VFP应用程序调用Microsoft Excel"             && 更改Excel标题栏
eole.ActiveWorkbook.SaveAs("D:\ABC\22.xls")              && 工作表另为
eole.ActiveWorkbook.saved=.t.                            && 放弃存盘

eole.ActiveSheet.UsedRange.Copy                          && 拷贝整个工作表
eole.ActiveSheet.Range("A1:E2").Copy                     && 拷贝指定区域
eole.WorkSheet("Sheet2").Range("A1").PasteSpecial        && 粘贴

eole.ActiveWorkbook.Save                                 && 存盘(自动存盘不提问)
eole.Workbooks.close                                     && 关闭工作簿
eole.quit                                                && 退出Excel


2、单元格的设置  ***********************************
eole.ActiveSheet.Columns("D:D").Delete                   && 删除列
eole.ActiveSheet.Columns("A:B").Delete                   && 删除列
eole.ActiveSheet.Columns(1).ColumnWidth=20               && 列的宽度(单位:字符个数)
eole.ActiveSheet.Columns(2).ColumnWidth=30
eole.ActiveSheet.Columns("C:BE").ColumnWidth=9.5
eole.Selection.Columns.AutoFit                           && 最适合的列宽

eole.ActiveSheet.Range("b3:d3").Borders(2).Weight=3      && 指定边框线宽度
                          (其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;
                               LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)

eole.ActiveSheet.Range("A1:BE29").Borders(1).LineStyle=1 && 设置四个边框线条的类型
eole.ActiveSheet.Range("A1:BE29").Borders(2).LineStyle=1 && 设置四个边框线条的类型
eole.ActiveSheet.Range("A1:BE29").Borders(3).LineStyle=1 && 设置四个边框线条的类型
eole.ActiveSheet.Range("A1:BE29").Borders(4).LineStyle=1 && 设置四个边框线条的类型

eole.ActiveSheet.Rows(1).Insert                          && 在第1行之前插入一行
eole.ActiveSheet.Columns(2).Insert                       && 在第2列之前插入一列
eole.cells(1,2).value="ABTMC"                            && 给单元格赋值
eole.cells(2,2).value="&BBBB"                            && 给单元格赋值
eole.ActiveSheet.Cells(1,4).ClearContents                && 清除单元格公式

eole.ActiveSheet.Rows(1).RowHeight=1/0.035               && 设置指定行的高度(单位:磅)
                                                         *(行高为1厘米,1磅=0.035厘米)
eole.ActiveSheet.ROWS(1).Font.Name="黑体"                && 设置字体
eole.ActiveSheet.ROWS(1).Font.Size=14                    && 设置字体大小
eole.ActiveSheet.ROWS(1).Font.Bold=.t.                   && 设置整行字体为粗体
eole.ActiveSheet.Cells(1,1).Font.Italic=.t.              && 设置字体为斜体
eole.Range("A3:BE3").select
eole.selection.WrapText = .T.                            && 自动换行
eole.selection.HorizontalAlignment=3                     && 水平方向 2左对齐,3居中,4右对齐
eole.selection.VerticalAlignment = 2                     && 垂直方向 1靠上 ,2居中,3靠下

eole.Range("A2:B2").select
eole.selection.MergeCells = .T.                          && 合并单元
eole.selection.HorizontalAlignment=2                     && 水平方向 2左对齐,3居中,4右对齐
eole.selection.VerticalAlignment = 2                     && 垂直方向 1靠上 ,2居中,3靠下

eole.Range("A5:M5").select
eole.Selection.Interior.ColorIndex = 34                  && 设置行颜色为[淡兰]

eole.ActiveSheet.Range("A1:BE29").NumberFormatLocal = ;
"_ * #,##0.00_ ; _ * -#,##0.00_ ;_ * "+"-"+"??_ ;_ @_ "  && 指定区域内的数字显示格式

3、打印页面的设置  *********************************
eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035          && 设置页眉到顶端边距为2厘米  
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035          && 设置页脚到底边距为3厘米
eole.ActiveSheet.PageSetup.TopMargin=4/0.035             && 设置顶边距为4厘米
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035          && 设置底边距为4厘米
eole.ActiveSheet.PageSetup.LeftMargin=2/0.035            && 设置左边距为2厘米
eole.ActiveSheet.PageSetup.RightMargin=2/0.035           && 设置右边距为2厘米
eole.ActiveSheet.PageSetup.CenterHorizontally=.t.        && 设置页面水平居中
eole.ActiveSheet.PageSetup.CenterVertically=.t.          && 设置页面垂直居中
eole.ActiveSheet.PageSetup.PaperSize=8                   && 设置页面纸张大小
                                                           (1-窄行8 5 11 39-宽行14 11)
eole.ActiveSheet.PageSetup.Orientation=2                 && 横向
eole.ActiveSheet.PageSetup.PrintTitleRows="$1:$3"        && 定义固定行
eole.ActiveSheet.PageSetup.PrintTitleColumns="$A:$C"     && 定义固定列
eole.ActiveSheet.PageSetup.CenterHeader= "&14&BTMC"      && 设置页眉
eole.ActiveSheet.PageSetup.CenterFooter="表__第&P页"      && 设置页脚

eole.Worksheets("Sheet1").Rows(18).PageBreak=1           && 在第18行之前插入分页符
eole.ActiveSheet.Columns(4).PageBreak=0                  && 在第4列之前删除分页符
eole.ActiveSheet.PageSetup.PrintGridlines=.t.            && 打印单元格网线

eole.ActiveSheet.PrintPreview                            && 打印预览工作表
eole.ActiveSheet.PrintOut                                && 打印输出工作表


4、记录条数的利用  *********************************
一般来讲,EXCEL表的来源为DBF文件,列、行应该是可以预知的
USE 111
COUNT TO AAA
USE
FWQ  = "A3:M"+ALLT(STR(AAA+?))  ?为EXCEL表插入的行数
eole.ActiveSheet.Range(FWQ).Borders(1).LineStyle=1       && 设置四个边框线条的类型
eole.ActiveSheet.Range(FWQ).Borders(2).LineStyle=1       && 设置四个边框线条的类型
eole.ActiveSheet.Range(FWQ).Borders(3).LineStyle=1       && 设置四个边框线条的类型
eole.ActiveSheet.Range(FWQ).Borders(4).LineStyle=1       && 设置四个边框线条的类型


5、VFP下直接调用EXCEL、WORD文件  *********************************
DECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,STRING, ;
                        STRING lpszFile, STRING, STRING, INTEGER
operate= "open"
ShellExecute(0,operate,"C:\111.XLS",0,0,1)               && EXCEL文件
ShellExecute(0,operate,"C:\111.DOC",0,0,1)               && WORD文件

****************************************

回复列表 (共46个回复)

11 楼

感谢szgjr指教。
我在编程处理问题时所遇到的难题是:
将一个熟知的exsel表导入到fox表中(当然字段名和字段数据类型都是事先考虑后的)。。如果用exsel的‘另存为’方法会提示几次存取,较为麻烦;用fox命令导入又会遇到字段名和字段数据类型不一致的问题。于是我按照从exsel表中逐条提取的办法,虽然慢一点,但编好程序后可一劳永逸(还可加入一些逐条对照修改的命令)。难题是由于不知道一共有多少纪录,在用“for n=1 to x ”命令时只能采用‘x=人工采取后输入’或者‘提前预置超大常量 ’的办法来处理。如果能用某种办法直接确定x的值,岂不很爽。
烦请SZGJR再帮忙考虑一下。

12 楼

感谢szgjr指教。
我在编程处理问题时所遇到的难题是:
将一个熟知的exsel表导入到fox表中(当然字段名和字段数据类型都是事先考虑好的)。如果用exsel的‘另存为’方法会提示几次存取,较为麻烦;用fox命令导入又会遇到字段名和字段数据类型不一致的问题。于是我按照从exsel表中逐条提取的办法,虽然慢一点,但编好程序后可一劳永逸(还可加入一些逐条对照修改的命令)。难题是由于不知道一共有多少纪录,在用“for n=1 to x ”命令时只能采用‘x=人工采取后输入’或者‘提前预置超大常量 ’的办法来处理。如果能用某种办法直接确定x的值,岂不很爽。
烦请SZGJR再帮忙考虑一下。

13 楼

答10楼朋友:
1.目前我无法知道。 进入EXCEL后就给微软控制了,必须人工点击“关闭”。
2.解决的思路我想:在生成同名表时,先将其关闭掉。试了多次尚未有结果,
  还需上网再找找。

答12楼朋友:
1.考虑到不改变你的思路, 最简单的办法是:将exsel表直接导为DBF文件。
  IMPORT FROM D:\WJM.XLS TYPE XL8 SHEET "WJM"
  打开该DBF文件, 删除第一条 count TO AAA 不就知道行数了吗?
2.最方便的办法:应该考虑DBF文件对DBF文件的取数。

14 楼

谢谢SZGJR

15 楼

还有问题请教,去以下地址回答吧,不然我给你加不上分。
http://www.programfan.com/club/showbbs.asp?id=47097

16 楼

SZGJR你好。
我还有一个问题请教,请帮帮我。
在控制EXCEL时,放弃存盘时不出现对话框的命令是什么?
http://www.programfan.com/club/showbbs.asp?id=43694
我记得好象有一个   shut    什么的。

17 楼

SZGJR你好。
我还有一个问题请教,请帮帮我。
在控制EXCEL时,放弃存盘时不出现对话框的命令是什么?
http://www.programfan.com/club/showbbs.asp?id=43694
我记得好象有一个   shut    什么的。

18 楼

SZGJR你好。
我还有一个问题请教,请帮帮我。
在控制EXCEL时,放弃存盘时不出现对话框的命令是什么?
http://www.programfan.com/club/showbbs.asp?id=43694
我记得好象有一个   shut    什么的。

19 楼

呀怎出现了三个回复呀,可能是我的网络的问题

20 楼

海军:
1.在什么情况下要放弃存盘!
2.一般进入EXCEL后就给“微软”控制了,必须人工干预。
3.绕道解决的思路:A.可否不显示“工作表”(后台运行);
                 B.利用不提问方式存盘,再通过程序判断,进行自动删除。

我来回复

您尚未登录,请登录后再回复。点此登录或注册