用Word做Delphi报表输出工具

原创 2001年06月05日 08:43:00

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

【Java】15个免费的报表整合工具简介(pdf,excel,word)

1. BIRT Project  BIRT报表是一款非常流行的开源报表开发工具。拥有和Dreamweaver一般的操作界面,可以像画table一样画报表,生成图片,导出Excel,html分页样样齐...
  • hj7jay
  • hj7jay
  • 2016年08月11日 10:12
  • 2048

在Delphi中很精确地控制生成的WORD文档的格式

var    WordApplication1: TWordApplication; 通过以下的方式就可以在DELPHI中很精确地控制生成的WORD文档的格式。     //-----------...
  • han99yi
  • han99yi
  • 2014年08月05日 09:30
  • 1569

DELPHI 7.0软件 自带有报表 Quick Report组件(TQRShape等所有组件 说明)

DELPHI7.0软件自带有报表Quick Report组件,但是默认的情况下,工具栏中是没有的,需要手动添加,步骤:   component->install packages->add->\bo...
  • u011704389
  • u011704389
  • 2014年02月26日 15:41
  • 1534

delphi开发学习五:QuickReoprt报表控件使用实例

报表是数据库应用程序设计中非常重要的一部分,数据库应用程序通常都要生成报表,并且打印出来。      在Delphi7.0中,默认情况下没有直接使用的QuickReport组件,使用时需先进行手工安装...
  • u011846249
  • u011846249
  • 2015年08月20日 21:46
  • 2398

Delphi操作Word的方法

Delphi操作Word的方法 一、VBA代码含义 Microsoft Word是一个集成化环境,是美国微软公司的字处理系统,但是它决不仅仅是一个字处理系统,它集成了Microsoft Vis...
  • xieyunc
  • xieyunc
  • 2015年11月27日 17:43
  • 2669

如何利用FastReport创建交叉报表?

转自:http://www.fastreportcn.com/Article/92.html 本文我们将创建一个交叉报表,用于显示员工四年中的工资。要创建交叉报表,我们需要使用到Fa...
  • cw370008359
  • cw370008359
  • 2014年12月11日 13:24
  • 1085

BI 开发EBS报表

可以采取两种方式编写布局语言,一是XSL语句,二是XMLP简易语句,个人建议使用前者,因为其是国际通行标准。另外,这两种语法可以混合使用,比如上面的条件格式化行和单元格。 在RTF中直接写的只能是X...
  • chenbiaolanyi
  • chenbiaolanyi
  • 2013年12月12日 20:24
  • 1513

使用python来实现报表自动化~

使用python来实现报表自动化~本篇文章将介绍: xlwt 常用功能 xlrd 常用功能 xlutils 常用功能 xlwt写Excel时公式的应用 xlwt写入特定目录(路径设置) xlwt P...
  • opm777
  • opm777
  • 2016年05月09日 23:10
  • 15960

python连接数据库出报表

python连接oracle数据库后,读取sql文件,以;分隔,遍历执行sql,将列名和记录打印出来。 #!/usr/bin/python #coding=utf8 ###应该数据库连接和游标作为返...
  • offbeatmine
  • offbeatmine
  • 2015年12月28日 15:19
  • 1543

WPF 根据Word模版导出数据到Word

WPF 根据Excel模版导出数据到Word前台.xaml文件:
  • csmzl
  • csmzl
  • 2017年05月24日 15:03
  • 709
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用Word做Delphi报表输出工具
举报原因:
原因补充:

(最多只允许输入30个字)