DELPHI,Office编程1


======================================================
注:本文源代码点此下载
======================================================

1、可供选择的技术:

(1) 通过delphi的控件tolecontainer 将office嵌入,这是最简单的ole嵌入,能够直接将office文档调用,只需要使用tolecontainer.run就可以将office文档直接启动。且这样启动的office文档与delphi程序是一个整体(从界面上看),但是它存在不可克服的缺点,即不能通过delphi控制office文档,也就不能实现将灵活操纵office的目的。基本上排除这项技术。

(2) 使用delphi提供的servers控件调用office,使用office的属性,使用delphi的servers控件来操纵office,在编程时delphi能够实现代码提示,总体上看能够较好的实现delphi对office的控制,但是还有一些office的功能不能在delphi中调用(比如自己编写的vba宏代码)。且实现功能时本来在vba代码中可选择参数在delphi调用的时候必须添加,否则,连编译都不能通过。这种方式启动的office与delphi程序分属两个窗体。

(3) 使用createoleobject将启动office,然后以ole方式对office进行控制。这种办法是使用以createoleobjects方式调用office,实际上还是ole,相比(2)service控件的最大缺点就不支持代码code的自动生成,但是咱们充分的利用vba代码code就能够弥补那个功能,这种方式能够真正做到完全控制office文件,能够使用office的所有属性,包括自己编写的vba宏代码。与servers控件和com技术相比,本方法能够真正地使用office的各种属性,和在vba中编写自己的代码基本一样,可以缺省的代码也不需要使用。重点放在这种技术的使用上。

2、delphi使用createoleobject 技术操控office文档。

原理性描述:

1、 生成vba代码code。word本身具有很强的可扩展性,尤其是支持用户自定义功能,其呈现

的主要方法就经过vba代码code来呈现的。在“视图->宏->查看宏”(alt+f8) 里面就能够看

到具体的宏代码code,能够直接编辑。而且还能够应用录制宏的功能自动生成宏代码code。窍门是

选取“视图->宏->录制宏”,然后执行自己希望经过程式呈现的功能,如存盘、打印等功能,

此时word一边执行您要呈现功能,一边将您的操作录制生成了唯一宏,在呈现功能后,能够选取

“视图->宏->查看宏”(alt+f8),查看生成的宏代码code。

例如:咱们要将文档中的“研讨”全部替换成“研讨”。

a. 点击“视图->宏->录制宏”,直接点击确定,默认的宏保存到了normal.dot操作系统公

用模板里面。

b. 点击“编辑->查找”,呈现弹出对话框,输入查找和替换的字,点确定。停止替换。

c. 结束宏的录制,点击结束按钮。

d. “视图->宏->查看宏”(alt+f8)。缺省查看normal里面

的模块里面的newmacros模块。

以下是生成的宏代码code:

sub ething宏1()

'

' ething宏1 宏

' 替换

'

selection.find.clearformatting

selection.find.replacement.clearformatting

with selection.find

.text = "你"

.replacement.text = "您"

.forward = true

.wrap = wdfindcontinue

.format = false

.matchcase = false

.matchwholeword = false

.matchbyte = true

.matchwildcards = false

.matchsoundslike = false

.matchallwordforms = false

end with

selection.find.execute replace:=wdreplaceall

end sub

2、 精简宏代码code。通常,生成的宏代码code有很多语句对您要呈现的功能来说都是多余的。咱们要

做的就找到咱们需求的代码code。此时咱们查看具体的代码code,剔除明显没有用途的代码code,然后光

标停留在宏上面,按f5执行,看也许呈现功能,逐步精简,得到最小代码code。此步骤可参考word的

vba帮助来判断代码code也许有用。

如上例,精简下来,剩下以下代码code。

sub macro1()

selection.find.clearformatting

selection.find.replacement.clearformatting

with selection.find

.text = "你"

.replacement.text = "您"

end with

selection.find.execute replace:=wdreplaceall

end sub

3、 转换成delphi编程代码code。这一步其实很简单,对于vba代码code,只需求在前面添加word的句柄或者

文档的句柄或者文档的句柄.application就能够直接操作了。

例:逐句中英对译:(word_handle是word的句柄)

(vb) selection.find.clearformatting

(delphi编程) word_handle.selection.find.clearformatting;

(vb) selection.find.replacement.clearformatting

(delphi编程) word_handle.selection.find.replacement.clearformatting;

以上两句简单添加上word的句柄就能够了。

(vb) with selection.find

text = "研讨"

replacement.text = "研讨"

end with

(delphi编程) word_handle.selection.find.text := '研讨';

word_handle.selection.find.replacement.text := '研讨';

以上几句由于delphi编程不支持variant的with框架,所以分开写。同时转换成delphi编程语句语言规则。

(vb) selection.find.execute replace:=wdreplaceall

(delphi编程) word_handle.selection.find.execute(replace:=2);

上面一句存在唯一小窍门,找到常量wdreplaceall的数值为2?

那里有几个办法,

一:直接use word2000或者word97单元(可以通过加入tserver中的word,查看uses,决定word2000 还是wordxp),那么直接应用常量wdreplaceall就能够了;

二:到word2000.pas或者word97.pas里面查找wdreplaceall的数值;

三:直接应用vba代码code见wdreplaceall的数值呈现出来。办法是写唯一小过程,然后执行,如下:

sub showvalue()

msgbox wdreplaceall

end sub

最后补充一下,很多涉及word的资料能够从word的vba帮助里面获得。具体文档在

?:"program files"microsoft office"office10"2052(xp)下,vbawd10.chm,更多有联系版本路径基本类似。

例子:

使用createoleobject将启动office,然后以ole方式对office进行控制。以excel表格为例(表格的格式可以是事先设定好的,也可以是自己自由定义的,这里以事先设定好表格的格式为例),进行说明:

(1) 在uses中添加comobj类;

(2) 申请一个全局变量:fvexcel ,类型为variant; 表示是excel对象

(3) 定义一个函数用来启动excel,如定义function openexcel(strfilename : string) : boolean;

function tform1. openexcel(strfilename : string) : boolean;

begin

result := true;

try

fvexcel := createoleobject('excel.application');

except

application.messagebox('打开excel失败',pchar(application.title),mb_iconerror);

result := false;

end;

fvexcel.visible := true;

fvexcel.caption := '';

fvexcel.workbooks.open(strfilename); //打开工作簿

fvexcel.worksheets[1].activate;//设置第1个工作表为活动工作表

end;

(4) 向fvexcel中插入数据

fvexcel.cells[row,col].value:=’中国’;//row表示行,col表示列;

(5) 设置格式

fvexcel.rows[row].font.color:=clred; //设置某一行数据的颜色

fvexcel.activesheet.pagesetup.leftmargin:=1;//设置左页边距

fvexcel.activesheet.pagesetup. rightmargin:=1;//设置右页边距

fvexcel.activesheet.pagesetup.zoom:=100;//设置显示比例

fvexcel.activesheet.pagesetup.papersize:= xlpapera4;//设置打印纸张大小

资料备查,源自网络

http://www.cnblogs.com/chinahbzm/articles/1086971.html

http://www.huinu.com/?action-viewnews-itemid-45961


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值