DelphiWord应用之一,其他的稍微后整理出来
2005-05-17 01:19
218 查看
笔者在实际应用中发现,报表的内容一般很少变动,但其字体格式及版式是经常变动的,而且有时用户为了某种需要,不想修改数据库的真实内容而又要改变报表内容。如果用ReportSmith可以解决前者问题,但对于后者则无能为力了,且其界面是英文的,不合用户习惯。如果用3.0中的TQReport的报表部件,则两者都不能实时解决,必须修改原代码后重新编译才能使用。而使用Word及Excel则完全可以克服以上不足。具体实现如下(以Word实现为例): 首先用Word编辑报表格式,并排好版,把将要输出的数据项用表单域代替,并取名。这里我们暂时假设有表单域Item1及Item2(均为文本型),将这个文档存为模板文件Example.dot,然后按如下步骤进行: 1)运行Delphi3,在Form1里加入一个System部件集里的TDdeClientCov部件,取名为DdeExample,将其ConnectMode设为ddeManual(手动方式);将DdeService设为‘(WinWord)’;将ServiceApplication设为‘WinWord’。 2)编写一个自定义过程,以激活Word,如下: procedure Tform1.WordActive(Cmds: TStrings); var WordPath: String; begin if(not DdeExample.OpenLink) then {判断是否巳动态链接} begin if(FindWindow('OpusApp', nil)=0) then begin WordPath := 'C:\msoffice\winword'; if(WordPath='') then ShowMessage('中文Word未安装或未设置路径,请安装设置Word中文 版。') else begin DdeExample.ServiceApplication := WordPath+'\Winword.exe'; if(DdeExample.OpenLink) then {如果巳动态链接执行宏命令} DdeExample.ExecuteMacroLines(Cmds,False) else ShowMessage('无法启动Word中文版!'); DdeExample.ServiceApplication := 'WinWord.exe'; end; end else begin{如果巳动态链接执行宏命令} DdeExample.ExecuteMacroLines(Cmds,False); end; end else DdeExample.ExecuteMacroLines(Cmds,false); end; 在private声明区里加入如下: procedure ActiveWord(Cmds: TStrings); 3)在Form1中加入一个按钮Button1,在其onclick事件里写如下代码: procedure TForm1.Button1Click(Sender: TObject); var Cmds:TStringList;{创建Cmds} TempItem1,TempItem2:String; begin cmds:=TStringList.Create; cmds.Clear; TempItem1:='数据项一'; TempItem2:='数据项二'; with Cmds do begin Clear; Add('[FileNew.Template ="Example.Dot″]');{打开模板文件Example.Dot} Add('[AppMaximize]');{文档最大化} Add('[SetFormResult"Item1″,″'+TempItem1+'″]');{将数据TempItem1传给表单域Item1} Add('[SetFormResult"Item2″,″'+TempItem2+'″]);{将数据TempItem2传给表单域Item2} end; WordActive(DdeExample,Cmds);{调用自定义过程} Cmds.Free;{释放Cmds} end; 运行这个程序,单击Button1,大家可以发现Word被启动了,屏幕上出现了:数据项一;数据项二两个数据项。最后,大家可以任意修改本报表的格式及数据,因为这时这个报表与具体的应用程序巳没有关系了。 本例中用的是中文Word6或中文Word7。由于Word97的宏命令巳变为Visual Basic语句,如大家想用Word97实现,请将其宏命令改变为相应的代码。 这是个简单的示例,大家可以利用Word的宏录制功能,录取更多的宏(如自动生成表格、填充文字、变动字体等宏命令),并与数据库的各种表联系起来,依次加入Cmds中即可实现您所要求的更复杂的功能。 |
相关文章推荐
- Linux 搭建简单的应用服务器(参考其他博客整理和自己实践)
- 解决JBoss 4.2.3GA发布出来的应用不能被其他机器访问的问题
- 整理出来的一个windows关机、锁定、重启、注销 API调用
- Math函数应用整理
- IOS打开其他应用、以及被其他应用打开
- 基于centos 5.5的应用服务器剪裁定制版出来了
- iOS 应用中打开其他应用
- 《深入Spring2》第五章“AOP及在Spring中的应用”的电子版出来了
- 【Get深一度】Win10更改文本、应用和其他项目大小改为125%后,第三方软件界面变模糊解决办法
- 将AltiumDesigner(Protel升级版)的PCB设计打造成利器——订制应用、操作、过滤表达式及其他一些微操作
- 微信小程序(应用号)开发资源汇总整理
- C#基础知识整理:基础知识(9) 接口的应用
- 整理~ 概率~应用
- 的VARCHART JGantt让你设计一个甘特图包含精确规划需求所需的功能,无论是项目计划,人员配置,生产控制或其他应用领域。
- 链表应用之-----整理音乐
- 近期网友遇到的一些问题,整理出来 大家可以学习 交流 MySQL问题及解答
- 判断是否为系统应用的几种方法[整理]
- 使用Sencha Architect开发Sencha Touch应用的整理
- Android触屏事件处理流程的最简整理及应用示例
- Android应用中如何调用其他应用的Activity