admin 管理员组

文章数量: 1184232


2024年4月20日发(作者:muimui女包)

龙源期刊网

Delphi编程实现Excel报表自动生成和发布

作者:冷建功 赵健

来源:《科技创新与应用》2013年第11期

摘 要:文章介绍如何使用 Delphi 编程通过定义报表内容描述、Excel 模板文件和服务器描

述文件实现 Oracle 数据库和 Excel 模板文件的数据交换,并以 Ftp 方式自动发布到 Web 数据

发布平台。

关键词:Delphi;Excel模板;报表定义;Ftp

1 引言

随着计算机应用技术的快速发展,Excel 电子表格的普及,工作中常常需要从不同的信息

管理系统中查询统计数据并以 Excel 表格方式展现报表。由于行业或者业务部门需求的变化,

导致报表格式、种类繁多。一些复杂报表,需求在软件开发期间都无法明确,为了解决此类问

题,采用了表格功能强大的 Excel 作为报表模板,Delphi 程序根据报表数据定义动态填入数

据,完成数据填充后以 Ftp 方式上传填写完数据的文件到 Web 数据发布平台,从而实现 Excel

报表的自动生成和发布功能。

2 实现原理

2.1 按照业务部门的需求,根据需要的报表格式,编辑好Excel报表模板文件;根据报表

的数据内容和区域,编写好报表定义文件。

2.2 以报表定义文件文件名作为运行的参数,在操作系统下创建批处理命令,并可以根据

实际需要把批处理加入操作系统的计划任务,实现按程序自动运行。

2.3 程序根据报表定义文件的描述,主要做如下操作:①读取指定的 Excel 模板文件;②

到指定的数据库服务器查询数据并填充 Excel 模板文件;③以Ftp方式上传生成好的Excel报

表文件到FTP服务器。

3 实现过程描述

3.1 报表定义文件

采用可扩展标记语言(XML文件描述),主要内容描述如下:

report name

龙源期刊网

D:\xxxx\template_

D:\xxxx\

1

ftp server name

ftp remote dir

……

database name

1

n1,n2,n3,n4

select col1,col2,… from table_name

……

……

在 Delphi 中使用控件解析方法生成 XML 文件接口框架代码,通过生成的接口单元读取

XML 文件,主要代码如下:

Var xmlReport:IXMLReportType;//定义报表定义文件变量

……

xmlReport := LoadReport(报表定义XML文件);//读取报表定义文件

if length(trim(ver))>0 then //是否指定FTP上传服务器

uplaodFile();//上传文件到Ftp服务器

龙源期刊网

……

3.2 服务器定义文件

文件格式同报表定义文件,主要内容及描述如下:

server name user/pwd@ip:port:sid

……

ftp server name

5000

username

……

Delphi 处理该文件方法同上,根据指定服务器名称取查找服务器子节点,主要代码如下:

//根据指定的FTP名称,取服务器定义文件中 FTP 中节点

for i := 0 to - 1 do begin

if (trim([i].Name) = trim(serverName)) then begin

result := [i]; exit; end;

龙源期刊网

end;

3.3 采用第三方数据库控件 ODAC 访问 Oracle 数据库

ODAC 全称 Oracle Data Access Components,是 Oracle 数据存取组件,直接使用 Oracle 接

口(OCI),在应用中建立连接可以使用 ODAC Net 选项无需在客户机上安装 Oralce 客户端,

仅需 TCP/IP 支持,本次开发中使用了 TOraSession 和 TOraQuery 两个控件,主要代码如下:

if ted then ; //关闭数据库连接

tString := getOracleServerNode(OracleServerNname).ConnectString;//

修改连接字串, 函数 getOracleServerNode 返回变量 Oracle 服务器节点;

t;//连接数据库;

ToraQuery 的使用方法同 Delphi 中 TQuery;

3.4 Oracle 数据集填充 Excel 数据区域

根据指定数据区域和SQL语句向Excel模板文件中填写数据,注意点:SQL语句运行结

果和指定数据区域要一一对应。

//处理Excel模板主要代码 excelTemplate 类型为 Variant;

excelTemplate := CreateOleObject( 'ation' );

e := false;//设置程序运行时为不可见

(Excel模板文件);

……

oks[1].saveas(outFile);//保存Execl模板文件

; //关闭

//填充 OraQuery 数据集到 excel 模板文件主要代码, rectarea 为报表定义文件中当前数据

区域节点

rect := strToRect();// strToRect为自定义 String 转 TRect 函数

eets[].Activate;//指定 excelTemplate中sheet;

龙源期刊网

for nowRow := to do begin

for nowCol := to do begin

[nowRow,nowCol] := ist[].AsString;

end;

end;

……

采用Delphi中 TNMFTP 控件上传文件

所有数据区域数据填充结束后,根据报表定义文件中指定的 FTP 服务器名称,在服务器

定义中查找对应 FTP 服务器节点上传文件,实现主要代码如下:

FtpFile:=(nil);

:= trim(); //FTP设置服务器地址

:= StrToInt (); //FTP设置端口号

:=trim(); //FTP设置用户名

rd:=trim(); //FTP设置口令

t:= StrToInt(t); //FTP设置延时

……

If ted then (MODE_BYTE);//设置按二进制方式传

(, + ExtractFileName

());//上传文件

……

4 结束语

龙源期刊网

Excel是使用广泛的办公软件,通过Excel与Delphi结合,使用者只要熟悉Oracle数据库

查询语言就可以设计出比较复杂的报表格式,并实现报表的定期自动生成与上传,切实提高了

工作效率。

参考文献

[1]耿宏运,等.Delphi6组件大全[M].北京:电子工业出版社,2002,7.

[2]Casteel,9i开发指南(PL\SQL程序设计)[M].北京:清华大学出版社,

2004,3.


本文标签: 报表 文件 定义 数据 服务器