基于Delphi的Excel动态报表技术

来源:百度文库 编辑:神马文学网 时间:2024/04/26 05:30:32
单振清  宋雪臣
(山东水利职业学院,山东  日照  276826)
摘  要  本文针对在Delphi中设计输出报表所遇到的问题,引用编程环境中提供的Excel对象,编程控制Access中的数据输出到Excel对象中,使基于任意数据表或查询的各种复杂报表的制作问题得到了解决。并通过具体项目开发实例详细阐述了基于Delphi的Excel动态报表制作技术。
关键词  Delphi;Access;Excel;动态报表
1  引言
在管理类软件中的使用中,用户总希望对一些有用的数据生成报表,一些高级语言开发工具都提供报表的制作功能,它们通常都是使用报表制作向导或设计器,事先摆放好字段位置,然后建立与数据表的绑定关系,从而生成报表。但对于一个通过SQL语句动态生成的数据表制作报表就难以完成了。Delphi作为一种优秀的可视化开发工具,在Servers页中提供了ExcelApplication、ExcelWorkbook和ExcelWorksheet组件,通过这几个组件可以建立与数据库的连接,使用Delphi编程控制Access数据库中的数据输出到Excel对象中,把需要打印的内容输出到Excel文件,借助Excel输出报表,成功实现了动态报表的制作。下面结合《学生成绩管理系统》,详细介绍在Delphi中使用Excel制作动态报表的方法。本例中使用的是Access数据库。
2  实现技术
通过“报表”菜单项打开一个窗体,在此窗体上选择数据表及字段,设置字段值的范围,编程形成条件,通过SQL语句生成数据表,导入Excel工作表中,完成动态报表的生成及打印功能。
2.1  使用ADO访问数据库
创建一窗体form1,添加ADOConnection、ADOQuery和DataSource组件,在TForm1.FormCreate事件中通过ADO建立Delphi应用程序与Access数据库的连接。Delphi中Access数据库与ADO的连接语句:
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0 ; Data Source=包含路径的数据库名; Persist Security Info=FALSE';
adoconnection1.Open;
ADOQuery1.Connection:=ADOConnection1;
2.2  引用Excel对象
在窗体上添加ExcelApplication、ExcelWorkbook、ExcelWorksheet组件,定义全局变量:
ExcelApp:TExcelApplication;//用来连接Excel应用程序
ExcelWkbook:TExcelWorkbook;//定义工作薄变量
ExcelWksheet:TExcelWorksheet;//定义Excel工作表变量
2.3  设置条件,生成报表
可以使用列表框添加所需要的数据表,并找到所需要的字段,设置各种复杂的条件,根据设置的条件使用SQL查询语句,把满足条件的记录导到Excel中,为了形成的报表具有一定的格式,可以先对一个空Excel文件设置好格式,作为模板文件,导入数据后,再以想要的文件名另存文件。可以在窗体上添加一个按钮,标题为“生成报表”,并通过文本框控件输入文件名。生成报表后以文本框中的内容作为文件名并保存。通过单击按钮生成Excel工作簿文件,用户可以打开工作簿文件进行打印预览、打印等操作。保存的具体实现语句为:
ExcelWksheet.SaveAs('e:\delphi\'+edit1.text);//保存文件
2.4  代码实现
定义变量:
ExcelApp:TExcelApplication;//用来连接Excel应用程序
ExcelWkbook:TExcelWorkbook;//工作薄
ExcelWksheet:TExcelWorksheet;//Excel数据表
i,j:integer;
生成报表按钮单击事件:
procedure TForm1.ButtonCreateClick(Sender: TObject);
begin
ExcelApp:=TExcelApplication.Create(Application);//创建Excel应用
ExcelWkbook:=TExcelWorkbook.Create(Application);//创建工作薄
ExcelWksheet:=TExcelWorksheet.Create(Application);//创建工作表
ExcelApp.Connect; //连接Excel应用程序
excelapp.Visible[0]:=true;
ExcelApp.WorkBooks.Open('e:\delphi\Nomalexcelbook1.xls',EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0); //打开模板文件
ExcelApp.ActiveWorkbook; //设置活动工作簿
Excelapp.ActiveSheet; //设置活动工作表
ExcelWkbook.ConnectTo(ExcelApp.Workbooks[1]); //工作簿与Excel应用程序连接
ExcelWksheet.ConnectTo(ExcelWkbook.Worksheets[1] as _worksheet); //工作表与工作簿连接
AdoQuery1.First;
for j:=0 to AdoQuery1.Fields.Count-1 do // 先写字段名
begin
ExcelWksheet.Cells.item[1,j+1]:=AdoQuery1.Fields[j].Dis playLabel; // Cells对象:表示工作表的一个单元格。
ExcelWksheet.Cells.item[1,j+1].font.size:=10;
end;
for i:=2 to AdoQuery1.RecordCount+1 do // 一共要读AdoQuery1.RecordCount-1条记录
begin
for j:=0 to AdoQuery1.Fields.Count-1 do
begin
ExcelWksheet.Cells.item[i,j+1]:=AdoQuery1.Fields[j]. Asstring; //写入记录
end;
AdoQuery1.Next;
end;
ExcelWksheet.Columns.AutoFit; //列自适应
ExcelWksheet.SaveAs('e:\delphi\'+edit1.text); //按用户提供的文件名保存文件
ExcelApp.Disconnect;
buttonCreate.Enabled:=false;
end;
窗体的生成事件代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\delphi\xsxx.MDB;Persist Security Info=FALSE';
adoconnection1.Open;
ADOQuery1.Connection:=ADOConnection1;
AdoQuery1.SQL.Text:='Select * from xscjb';//可以选择表进行多表查询
AdoQuery1.Active:=True ;
DataSource1.DataSet:=AdoQuery1;
ButtonCreate.Enabled:=false;
end;
编辑框改变时,“生成报表”按钮可用,事件代码:
procedure TForm1.Edit1Change(Sender: TObject);
begin
ButtonCreate.Enabled:=true;
end;
窗体退出时代码:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ExcelApp.Quit;
ExcelApp.Free; //释放变量
ExcelWkbook.Free; //释放变量
ExcelWksheet.Free;// 释放变量
end;
此代码在Delphi 6.0、Access2000及Excel2000环境下调试成功。
3  结束语
报表是管理系统类软件中不可缺少的组成部分,在开发《学生成绩管理系统》时,遇到一些动态生成的数据表,需要生成报表,使用Delphi提供的报表功能难以实现,本系统引入Excel对象,把通过SQL动态生成的数据表导入Excel文件中,并且保存,用户可以打开Excel文件,按照自己的要求设置报表的外观,进行预览或打印。在Delphi中引入Excel对象,成功解决了Access中动态生成的数据表的报表制作问题,为Delphi中各类具有特殊格式的复杂报表的制作提供了参考依据。
参考文献
[1] 中国IT培训工程编委会,精通Delphi6.0[M],珠海: 珠海出版社.2002
[2] MARCO CANTUTIM GOOCHJOHN F.LAM,Delphi高级开发指南 [M].成都:电子科技大学出版社
[3] 秦敬辉,Delphi程序设计教程[M],北京:中国电力出版社.2003
收稿日期:9月4日   修改日期:9月15日
作者简介:单振清(1970- ),女,山东东营市人,山东水利职业学院讲师,硕士,从事计算机及应用方面的教学及研究工作。