说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

用Word做Delphi报表输出工具

HTML文档下载 WORD文档下载 PDF文档下载
用Word做Delphi报表输出工具

笔者在实际应用中发现,报表的内容一般很少变动,但其字体格式及版式是经常变动的,而且有时用户为了某种需要,不想修改数据库的真实内容而又要改变报表内容。如果用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中即可实现您所要求的更复杂的功能。

开发者不容错过的10款免费JavaScript游戏引擎 付费授权、开放源码,全新虚幻引擎4正式发布! Larry Page未来计划:用科技创造美好生活 AWS 8周年,收入超四主要对手之和 分析:北京网络广播电视台私有云实践 靠~~我的VC又开始无聊了~~ DBGRIDEH的焦点转移问题。 用c库函数怎样创建一个新文件夹呢?怎样获得一个指定文件夹是否存在的信息?谢谢指教! 急!急!急!急!急!急! DataSet---->XML问题 关于空字符的问题 OUTLOOK问题在线等候急急急!·!! 一个ADSL拨号上网的问题,在线等~~~~~~望大家给予鼎力相助,在此先行谢过了~~~~~~~~~~~~~~ 一个比较辣手的大问题!关于数据与控件!有兴趣进来看看! 现在有一块长6米,宽2.5米的黄布,要做成两直角边 给一个数组命名,规定它的类型并指定数组元素个数,这 2006分之2005减2005分之2004 和 ff(x^2+y^2)d6,其中D是矩形闭区域|x 在VisualFoxPro中,substr是什么意 sentence.substr(a,b)中subs 为什么世界会有生命?宇宙以外也没有呢? 若数据8,9,7,8,7 ,3,则这组数据的众数是 求答案求答案化学题求解释 俄罗斯总理梅德韦杰夫访问安徽包公祠(俄总理参观包公祠 向俄国推介包公(图也门一男子烧死15岁女儿 只因其与未美一公司将开发氦气球太空游 游客可观美观测到迄今最古老星系 距地球131最牛吃货竞技《中国味道》第3季开播竞2014新起点,再出发南方都市报春运“抢票”战打得火热40位川军“口述历史” 《壮士出川》格斗帝国三国之绝对武力整容尸重生之大纨绔血医地震遗址纪念公园旅游澳凼大桥旅游香港大巴士观光游旅游元上都遗址旅游红石寨旅游度假区旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘