Delphi中如何调用Excel VBA

1.创建Excel对象

eole=CREATEOBJECT("Excel.application")

2.添加新工作簿

eole.Workbooks.add

3.设置第3个工作表为激活工作表
eole.Worksheets("sheet3").Activate

4.打开指定工作簿
eole.Workbooks.Open("c:\temp\ll.xls")

5.显示Excel窗口
eole.visible=.t.

6.更改Excel标题栏
eole.Caption="VFP应用程序调用Microsoft Excel"

7.给单元格赋值
eole.cells(1,4).value=XM(XM为数据库字段名)

8.设置指定列的宽度(单位:字符个数)
eole.ActiveSheet.Columns(1).ColumnWidth=5

9.设置指定行的高度(单位:磅)
eole.ActiveSheet.Rows(1).RowHeight=1
(设定行高为1磅,1磅=0.035厘米)

10.在第18行之前插入分页符
eole.Worksheets("Sheet1").Rows(18).PageBreak=1

11.在第4列之前删除分页符
eole.ActiveSheet.Columns(4).PageBreak=0

12.指定边框线宽度(Borders参数如下)
ole.ActiveSheet.Range("b3:d3").Borders(2).Weight=3

13.设置四个边框线条的类型
eole.ActiveSheet.Range("b3:d3").Borders(2).LineStyle=1
(其中Borders参数:1-左、2-右、3-顶、4-底、5-斜、6-斜/;LineStyle值:1与7-细实、2-细虚、4-点虚、9-双细实线)

14.设置页眉
eole.ActiveSheet.PageSetup.CenterHeader="报表1"

14.设置页眉(字体大小)
eole.ActiveSheet.PageSetup.CenterHeader="&50报表1" &&'&'后面的50可以自定义,表示字体的大小

15.设置页脚
eole.ActiveSheet.PageSetup.CenterFooter="第&P页"

15.设置页脚(字体大小)
eole.ActiveSheet.PageSetup.CenterFooter="&28第&P页" &&'&'后面的28可以自定义,表示字体的大小

16.设置页眉到顶端边距为2厘米
eole.ActiveSheet.PageSetup.HeaderMargin=2/0.035

17.设置页脚到底边距为3厘米
eole.ActiveSheet.PageSetup.FooterMargin=3/0.035

18.设置顶边距为2厘米
eole.ActiveSheet.PageSetup.TopMargin=2/0.035

19.设置底边距为4厘米
eole.ActiveSheet.PageSetup.BottomMargin=4/0.035

20.设置左边距为2厘米
eole.ActiveSheet.PageSetup.LeftMargin=2/0.035

21.设置右边距为2厘米
eole.ActiveSheet.PageSetup.RightMargin=2/0.035

22.设置页面水平居中
eole.ActiveSheet.PageSetup.CenterHorizontally=.t.

23.设置页面垂直居中
eole.ActiveSheet.PageSetup.CenterVertically=.t.

24.设置页面纸张大小(1-窄行8511 39-宽行1411)
eole.ActiveSheet.PageSetup.PaperSize=1

25.打印单元格网线
eole.ActiveSheet.PageSetup.PrintGridlines=.t.

26.拷贝整个工作表
eole.ActiveSheet.UsedRange.Copy

27.拷贝指定区域
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.设置字体
eole.ActiveSheet.Cells(2,1).Font.Name="黑体"

32.设置字体大小
eole.ActiveSheet.Cells(1,1).Font.Size=25

33.设置字体为斜体
eole.ActiveSheet.Cells(1,1).Font.Italic=.t.

34.设置整列字体为粗体
eole.ActiveSheet.Columns(1).Font.Bold=.t.

35.清除单元格公式
eole.ActiveSheet.Cells(1,4).ClearContents

36.打印预览工作表
eole.ActiveSheet.PrintPreview

37.打印输出工作表
eole.ActiveSheet.PrintOut

38. EOLE.CommandBars(1).Controls(1).accChild(18).Execute &&打印(菜单序号18为Excel2003的‘打印’项)

&&不同版本Excel的菜单序号可以通过以下程序VFP代码取得  *(需要在VFP7.0以上运行)

[plain]  view plain  copy
 print ?
  1. oXls=GETOBJECT("","excel.sheet")  
  2. XlApp=oXLS.APPLICATION  
  3. XlSheet=XlApp.ActiveSheet  
  4. bars=xlapp.CommandBars.COUNT  
  5. STR=''  
  6. FOR i=1 TO bars  
  7.  STR=STR+CHR(13)+ALLTRIM(STR(i))+'、'+xlapp.CommandBars(i).accName+'(NAME:'+xlapp.CommandBars(i).NAME+'INDEX:'+ALLTRIM(STR(xlapp.CommandBars(i).INDEX))+')'  
  8.  bars2=xlapp.commandbars(i).accChildCount  
  9.  FOR j=1 TO bars2  
  10.   TRY  
  11.    obj=xlapp.commandbars(i).CONTROLS(j)  
  12.    STR=STR+CHR(13)+'  '+ALLTRIM(STR(j))+'、'+xlapp.commandbars(i).CONTROLS(j).accname+'(ID:'+ALLTRIM(STR(xlapp.CommandBars(i).CONTROLS(j).ID))+')'  
  13.    FOR k=1 TO obj.accChildCount  
  14.     TRY  
  15.      IF NOT EMPTY(obj.CONTROLS(k).accname )  
  16.       STR=STR+CHR(13)+'       '+ALLTRIM(STR(k))+'、'+obj.CONTROLS(k).accName+' (ID:'+ ALLTRIM(STR(obj.CONTROLS(k).ID))+')'  
  17.      ENDIF  
  18.     CATCH  
  19.      EXIT  
  20.     ENDTRY  
  21.    ENDFOR  
  22.   CATCH  
  23.    EXIT  
  24.   ENDTRY  
  25.  ENDFOR  
  26.  WAIT WINDOWS ALLTRIM(STR(i))+' / '+ALLTRIM(STR(bars))+'  '+STR(i/bars*100,10,2)+'%' NOWAIT  
  27. ENDFOR  
  28. SAVE TO XLS.txt ALL LIKE STR  
  29. MODIFY COMMAND XLS.txt  
  30. RETURN  
39.工作表另存为
eole.ActiveWorkbook.SaveAs("c:\temp\22.xls")

40.放弃存盘
eole.ActiveWorkbook.saved=.t.

41.存盘
eole.ActiveWorkbook.save

42.关闭工作簿
eole.Workbooks.close

43.退出Excel
eole.quit

RELEASE eole &&只有释放对象变量, EXCEL进程才会完全关闭

44.合并单元格
eole.ActiveSheet.Range("A4:B5").MergeCells=.t.

45.下列设置大家自己理解(VFP代码)

46.文本对齐
    eole.range("A4:c4").HorizontalAlignment =1 &&水平(1-默认、2-靠左、3-居中、4-靠右、5-填充、6=两端对齐、7=跨列居中、8=分散对齐)
    eole.range("A4:c4").VerticalAlignment =2   &&垂直(1=靠上、2=居中、3=靠下、4=两端对齐、5=分散对齐)

[plain]  view plain  copy
 print ?
  1. With crfole.ActiveSheet.PageSetup  
  2.     .LeftHeader = chr(13)+"左页眉"  
  3.     .CenterHeader = "中页眉"  
  4.     .RightHeader = "右页眉"  
  5.     .LeftFooter = "左页脚"  
  6.     .CenterFooter = "中页脚"  
  7.     .RightFooter = "右页脚"  
  8.     .orientation=1    &&1竖排,2横排  
  9. EndWith  
  10. With crfole.Range("A4:C4")  
  11.     .MergeCells = .t.  
  12.     .WrapText =.f.  
  13.     .Orientation = 0  
  14.     .AddIndent =.f.  
  15.     .ShrinkToFit = .f.  
  16. EndWith  

47.拷贝整个工作表(含格式)
eole.activesheet.cells.copy       &&拷贝
eole.sheets(1).select           &&选择第一工作表
eole.ActiveSheet.Paste          &&粘贴

eole.ActiveSheet.Cells(3,4).value && ActiveSheet 为当前的Sheet工作薄名字,Cells(3,4).value 为第3行第4列的值

以上控制调用语句在中文VFP5.0企业版下运行通过,运行环境为Excel 97及中文Windows 98

48. 显示某个单元格的批注内容
eole=CREATEOBJECT("Excel.application")
eole.Workbooks.OPEN("d:\TEST\testa.xls")
eole.VISIBLE=.T.
eole.Range("B5").Comment.Text &&显示B5单元格的批注内容
eole.Workbooks.CLOSE
eole.QUIT
RELEASE EOLE

49.EOLE.ActiveSheet.PageSetup.PrintTitleRows="$1:$1" &&每页都打印行标头(每页顶部出现的单元格的行)

50.保护工作表:

EOLE.ActiveSheet.PROTECT('密码',.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.,.T.)

51.保护工作薄

EOLE.ActiveWorkbook.PROTECT('密码',.T.,.T.)
第一个.T.:保护工作簿结构
第二个.T.:保护工作簿窗口

2.置允许用户编辑区域
EOLE.ActiveSheet.Protection.AllowEditRanges.Add("区域3",EOLE.ActiveSheet.Range("A2:D5"))

--------------------------------------------------------------
如何取得当前EXCEL表中工作表的数目及各工作表的名称?
CLEAR
LOCAL lnSheetCount
EOLE=CREATEOBJECT("EXCEL.APPLICATION")    &&创建Excel对象
EOLE.WORKBOOKS.OPEN("c:\111\321.xls")    &&打开指定工作簿
WITH EOLE
 lnSheetCount=.WorkBooks(1).Sheets.Count   &&统计工作表数量
ENDWITH
?'当前EXCEL表中工作表的数目为:'+ALLTRIM(STR(lnSheetCount))
FOR EACH oMyVar IN eole.sheets
 ?'当前EXCEL表中工作表的名称分别为'+oMyVar.name  &&显示Excel表中所有工作表
NEXT oMyVar
EOLE.WORKBOOKS.CLOSE      &&关闭工作簿
EOLE.QUIT       &&退出Excel
--------------------------------------------------------------
获取工作表名称

在以下示例中,创建了一个 microsoft excel 实例,添加了一个新的工作簿。使用 foreach 语句显示工作簿中每个工作表的名称。此示例要求在运行示例的机器上正确安装 microsoft excel。
oExcel = CREATE("Excel.Application")
oExcel.Workbooks.ADD

FOR EACH oMyVar IN oExcel.sheets
   ? oMyVar.name
NEXT oMyVar
--------------------------------------------------------------

Excel报表巧生成

巧让FoxPro数据生成Excel报表
Visual FoxPro是应用广泛的前台数据库开发平台之一,因此在我们日常工作中时常会遇到DBF数据文件。然而随着办公自动化的普及,越来越多的时候需要将DBF文件转化为Excel电子文档。常用转化方法是在FoxPro中用Copy命令进行格式转化或直接用Excel打开DBF文件。这两种方式虽然都能达到目的,却不能得到格式规范、可以直接打印输出的报表,且输出的Excel文件中,无法对数据类型进行有效转换,极易出现数据统计错误。有没有更好的方法呢?这里有一个更加通用的方法,在VFP中调用Excel,可以由DBF文件直接生成格式如下图所示一样复杂的Excel报表(如图1)。 Excel报表
具体过程如下:
编辑推荐文章 
● 新鲜接触Excel 2000 XP
● Excel 2000公式应用的几条经验
● Excel 2000函数应用之信息函数 
    假设我们要将表Agcallop.dbf文件输出为Excel格式文档,报表形如图1所示。为使通用性更强,页面采用A4纸横向输出,默认字体为宋体10号,页脚处添加页号。
部分程序代码如下:
m.outfilename=putfile('输出结果','agcallop','xls')
&&取导出文件名称
ef=CREATEOBJECT('Excel.application')
&&调用Excel程序
ef.Workbooks.add
&&添加工作簿
ef.Worksheets("sheet1").Activate
&&激活第一个工作表
ef.visible=.t.
&&显示Excel界面
ef.Cells.Select
&&选择整张表
ef.Selection.Font.Size = 10
&&设置整表默认字体大小为10
select 0
use agcallop
&&选择被导出的表
num=reccount()
&&求导出总记录数
go top
i=5
ef.range("F1:K1").Select
&&选择标题栏所在单元格
ef.Selection.Merge
&&合并单元格
with ef.range("F1 ")
&&设置标题及字体属性
.value='客户服务部业务代表工作量情况统计表'
.Font.Name="黑体"
.Font.size=18
endwith
ef.Rows(2).RowHeight=1/0.035
&&设置第二行高度为1cm
ef.range("H2:O2").Select
&&选定统计条件栏所在单元格
ef.Selection.Merge
&&合并单元格
ef.range("H2").Font.size=10
ef.range("H2").HorizontalAlignment=4
&&设置内容对齐方式为右对齐,3为居中,4为右对齐
ef.range("H2").value='统计时间:'+dtoc(date())+' 打印日期:'+dtoc(date())
ef.Rows("3:4").Select
with ef.Selection
.HorizontalAlignment = 3
&&设置3、4行为水平对齐
.VerticalAlignment = 2
&&垂直居中
.NumberFormatLocal = "@"
&&设置3、4行为字符型内容
endwith
ef.Range("A3:A4").Select
ef.Selection.Merge
&&纵向合并第一列3、4行
ef.Range("A3").value='工号'
&&设置第一列标题内容
ef.Columns("A").Select
&&整列选择
ef.Selection.HorizontalAlignment = 3
&&水平居中
ef.Columns("A:B").Select
ef.Selection.NumberFormatLocal = "@"
&&设置A、B列为字符型内容
ef.Range("B3:B4").Select
ef.Selection.Merge
&&纵向合并第二列3、4行
ef.Range("B3").value='姓名'
&&设置第二列标题内容
ef.Columns("B").Select
&&整列选择
ef.Selection.HorizontalAlignment = 3
&&水平居中
ef.Range("C3:E3").Select
&&横向合并第三行C-E列
ef.Selection.Merge
ef.Range("C3").value='话务总量'
&&第三行大标题为“话务总量”的列
ef.Range("C4").value='电话呼入量'
&&“话务总量”下第1个小标题“电话呼入量”
ef.Range("D4").value='电话呼出量'
&&“话务总量”下第2个小标题“电话呼出量”
ef.Range("E4").value='合 计'
&&“话务总量”下第3个小标题“合计”
ef.Range("F3:H3").Select
ef.Selection.Merge
ef.Range("F3").value='话务总时间'
ef.Range("F4").value='呼入时间'
ef.Range("G4").value='呼出时间'
ef.Range("H4").value='合 计'
ef.Range("I3:K3").Select
ef.Selection.Merge
ef.Range("I3").value='单个话务平均时间'
ef.Range("I4").value='呼入时间'
ef.Range("J4").value='呼出时间'
ef.Range("K4").value='合 计'
ef.Range("L3:L4").Select
ef.Selection.Merge
ef.Range("L3").value='累计工作时间'
ef.Range("M3:M4").Select
ef.Selection.Merge
ef.Range("M3").value='无效时间'
ef.Range("N3:N4").Select
ef.Selection.Merge
ef.Range("N3").value='录入量'
ef.Range("O3:O4").Select
ef.Selection.Merge
ef.Range("O3").value='有效时间比' 
接下来通过scan语句,依次为每一行每一列单元格赋值。为了获得更好的打印效果,还需进行页面设置,如标题行、页面居中、横向排版等,还可以加边框线。
以上程序在VFP 6+Excel 2000+Windows 2000下调试通过。实际应用中可根据需要对各项参数设置进行相应调整。

--------------------------------------------------------------
FOX控制EXCL文件另存为DBF(EXCL后台运行)

fil=Thisform.List1.Value &&其值为一个包含路径的文件名
eole=CREATEOBJECT('Excel.application')
eole.Workbooks.Open(fil) &&打开文件
eole.Selection.AutoFilter &&关闭(如果无则打开)自动筛选
eole.Range("A1:F1000").Select &&选中从第1行到1000行的前6列数据(另存后只有这些数据)
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. &&不保存当前EXCL表
eole.Workbooks.close &&关闭表
eole.quit &&退出EXCL
RELEASE eole &&释放变量

*************例子******************
eole=CREATEOBJECT('Excel.application')
eole.Workbooks.Open('D:\TEST.XLS') &&打开文件
eole.Range("A1:B100").Select &&选中从第1行到1000行的前6列数据(另存后只有这些数据)
eole.Columns.AutoFit  &&让所有的列宽都自动调整
IF FILE('D:\TEST.DBF')
 DELETE FILE 'D:\TEST.DBF'
ENDIF
eole.ActiveWorkbook.SaveAs('D:\TEST.DBF',8) &&另存为DBF
eole.ActiveWorkbook.saved=.t. &&不保存当前EXCL表
eole.Workbooks.close &&关闭表
eole.quit &&退出EXCL
RELEASE eole &&释放变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值