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;//设置打印纸张大小
资料备查,源自网络