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

用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中即可实现您所要求的更复杂的功能。

苹果下一代iPhone的十大预测 《近匠》第07期,专访《恶魔塔防》团队,看俄国复杂深奥的游戏文化 代码托管网站GitHub的总裁和CEO进行职位互换 使用Chromebook的五个指南 云中游终极声明:热酷侵权,有种正面回答少打太极 背后故事:英特尔Edison中国研发 内部评审中曾三次被拒 全栈工程师会是未来的发展趋势吗? 大数据整理:囊括分片、存储方法、扩展等多个方面 物联网 ,下一个云计算市场 一位数据挖掘工程师眼中的“大数据与企业的数据化运营” 揭开“iOS in the Car”的神秘面纱 与Apple对峙:法律途径,并非是我想要 Halfbrick新作市场表现低迷:前作辉煌难续 专访豌豆荚:融资,会给技术团队带来哪些影响? 前端开发必备 40款优秀CSS代码编写工具推荐 新环境下的新体验是互联网硬件火热的根本原因 信息安全救星 ——变形代码产品ShapeShifter AWS启动大规模降价,引领行业降价潮流 Windows 8.1 Update 1最新版的截图再遭曝光 2013年软件领域因缺陷导致的五大事件 专访AMD技术高管 详解Kaveri技术性能及新开发特性 网络的东西南北:从SDN到网络虚拟化 Bug让Chrome浏览器成了窃听器 联想23亿美元收购IBM X86服务器硬件及服务 Mozilla联手富士康推出Firefox OS平板 基于Web提供服务 GitHub中国游记最终回——开源与车库的碰撞 学以致用,光棍极客通过大数据搞定女朋友 1月24日:Mac步入了而立之年,生日快乐! 微软2014财年Q2财报:Surface营收翻倍 趣文:假如编程语言在一起聚餐 AOL收购个性化服务公司Gravit,耗资9070万美元 基础C语言题..详解100分 高手请进,xsl的发布问题 请问win2000的系统日志放在什么地方?文件名叫什么? 何人用过 IDragSourceHelper 一个关于InstallShield6.3的特难的问题 lotus Notes 数据库问题! 怎样设计纵向的库?难难!!!求求!! 关于代理的疑难问题? 一个简单的问题 请问各位,如何屏蔽掉地址栏里的地址,或者只留一个主页地址!把其他页面的地址屏蔽掉!!!! Oracle如何查询小写表名的数据表,解决了100分! 为啥m_combobox_ct.SetWindowText("")会不管用呢? 弱智型问题,好心人进来拿分吧! 在javabean中怎么去使用输出参数是游标的存储过程,希望的到一个例子 2002年最后一天,失恋了! 静态成员变量是全局变量吗?我能够在一个模块的几个不同文件中声明同名的静态成员变量吗? 求救!!!会不会仅仅是病毒的问题? compute 字段在报表中的应用问题?在线等待! 高分相送,c++ builder中使用ocx控件 关于listview与数据库的问题,请大家帮我看看程序出错在哪?谢谢!! 高手请进!! 高手请进!! 关于数据库问题 高手请进!! 静态成员变量是全局变量吗?我能够在一个模块的几个不同文件中声明同名的静态成员变量吗? 一个奇怪的问题——ADO连接数据库 还是文件上传的问题~~ 怎样取得水晶报表的总页数? 现在还有多少在做lotus开发的程序员啊?有没前途,这东西? 用VB怎样调用SQL的计划任务 Help!Help!关于在application中(不是applet)用MediaTracker读图片的问题,高分酬谢。 请高手指点高程软件工程部分哪些书比较好啊! 当程序与远程数据库服务器建立连接后断网了,怎么能让程序自动再建立连接?谢谢 关于tatabto控件的问题!! 请问怎么样让NetMeeting ActiveX 控件自动接受呼叫? 在网关上修改通过的数据包,要求增添一些数据,请问大家有什么方法,要注意什么问题? 我原来有个ucap.jar包,把它拷到和notes.jar包同一个目录,代理中import不进来。请问各位大虾要不要设置classpath,怎么设置? 流场的可视化 这样的模板为什么不工作?? 请问这是什么错误!!各位帮我解决一下! 请问怎么样让NetMeeting ActiveX 控件自动接受呼叫?帮帮小妹吧 hellogzz,我就这80分,给你了 请问怎么样让NetMeeting ActiveX 控件自动接受呼叫? 有关form的菜菜问题,求助!!! 在存储过程中如何进行字符的运算 如何从表中随机选择一条记录? ?急救,在线等候!delphi怎么实现可以在word里面通用的报表??高分 Norton 服务器版怎么样?是否服务器升级病毒库后客户端可以从服务器上直接升级呢? 如何采用触发的方式接受串口消息,并将消息内容转化成字符串型? 各位高手,如何针对不同尺寸和分辨率的屏幕设计软件界面? 我ADVGRID6的控件组,在DLEPH7下通不过,总是说缺.PAS文件,其实它已经存在!为什么... 超半数日民众称内阁成员参拜靖国神社是辽宁抚顺洪涝灾害死亡人数升至63人失多地遭洪涝灾害损失惨重 “潭美”逼近海洋局针对“潭美”启动海洋灾害一级应广州80名城管穿防刺背心高调执法(图易信推广联手三大门户 阿里重赏推广\让违法建筑无处遁形 浙江7个月拆违6海曙拆除市中心迄今为止最大面积的楼顶卫计委:捐献器官移植下月起计算机自动意大利海岸再现难民潮 数百偷渡客登陆连夜暴雨袭击杭城 出租车浮出水面温州三岁女孩公园玩耍时失踪 一周后尸杭州庆春立交桥下出租车遇“灭顶之灾”印度国产航母将在印度南部港口城市科钦北京高楼楼顶盖别墅 违建必须强拆朱镕基新书8月12日出版 内容亲自审武汉遭12级大风袭击 机场紧急关闭男子自拍强奸全程视频欲敲诈 案发后视马英九过境纽约 一天行程倍受瞩目西藏昌都6.1级地震 震中距昌都市约杭州:男子贪图凉爽夜宿江堤 遇涨潮被战争之殇:叙利亚难民儿童挣扎逃难 露美国应放下对华意识形态偏见江苏连云港原书记李强涉嫌受贿案被提起(行进中国)草原深处“马背法庭”受追阿富汗塔利班对北部城市昆都士发起猛攻浙江省平阳县乙未年祭孔庆典沪指缩量收涨0.27%重上3100点江苏连云港市委原书记李强涉嫌受贿罪被武汉市发改委原主任吴清涉受贿罪被立案两部门发文禁止游戏场所设置具有退币等徐绍史:加快形成多种投融资机制鼓励和大众“排放门” 早有端倪2020年碳强度降低40% 45%APP私家菜后厨猫 狗随意进出队长归来虐童案:检方建议从宽处罚被害人索赔31万无视限时 翻门看“大雪山”草根足球 梦想破笼而出我是站在了巨人肩膀上中美破制售假冒安全气囊案
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘