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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

摘要:文章介绍如何使用 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_xxx.xls

d:\xxxx\xxxxxx.xls

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(xmlreport.ftpserver))>0 then //是否指定ftp上传服务器

uplaodfile(xmlreport.output);//上传文件到ftp服务器……

3.2 服务器定义文件

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

server name user/pwd@ip:port:sid

……

ftp server name

xxx.xxx.xxx.xxx

5000

username

……

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

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

for i := 0 to xmlservers.ftp.childnodes.count - 1 do begin if (trim(xmlservers.ftp.server[i].name) = trim (servername)) then begin

result := xmlservers.ftp.server[i]; exit; end;

end;

3.3 采用第三方数据库控件 odac 访问 oracle 数据库

odac 全称 oracle data access components,是 oracle 数据存取组件,直接使用 oracle 接口(oci),在应用中建立连接可以使用 odac net 选项无需在客户机上安装 oralce 客户端,仅需tcp/ip 支持,本次开发中使用了 torasession 和 toraquery 两个控件,主要代码如下:

if orasession.connected then orasession.close; //关闭数据库连接

orasession.connectstring := getoracleservernode (oracleservernname).connectstring;//修改连接字串,函数getoracleservernode 返回变量 oracle 服务器节点;orasession.connect;//连接数据库;

toraquery 的使用方法同 delphi 中 tquery;

3.4 oracle 数据集填充 excel 数据区域

根据指定数据区域和sql语句向excel模板文件中填写数据,注意点:sql语句运行结果和指定数据区域要一一对应。

//处理excel模板主要代码 exceltemplate 类型为 variant;exceltemplate := createoleobject

(‘excel.application’);

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

exceltemplate.workbooks.open(excel模板文件);

……

exceltemplate.workbooks[1].saveas(outfile);//保存execl 模板文件

exceltemplate.quit; //关闭

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

rect := strtorect(rectarea.rect);// strtorect为自定义string 转 trect 函数

相关文档
最新文档