admin 管理员组文章数量: 887021
2023年12月16日发(作者:数组词 多音字两个字)
2011年5月 安庆师范学院学报(自然科学版) Journal of Anqing Teachers College(Natural Science Edition) May.2011 VOI.17 NO.2 第l7卷第2期 在Delphi编程中利用Excel实现动态报表 余永武 (内江师范学院计算机科学学院,四川内江641112) 摘要:Delphi作为一个RA P工具,在界面设计和数据库编程上具有强大的功能,是开发C/S结构的MIS系统的 有力工具。但是Delphi在动态报表的处理上有一定的局限,而提供灵活的报表打印是MIS系统十分重要的功能。利用 Delphi中的Excel控件,使用事先制作好的Excel报表模板,将数据动态填入,从而实现复杂的不规则报表。用户可以根 据需要自定义模板,提高了系统的灵活性。 关键词:动态报表;信息管理系统;Delphi;客户端/服务器结构 中图分类号:TP311.11 文献标识码:A 文章编号:1007—4260(2011)02一O114—04 0 引 言 随着计算机技术的不断普及,办公的数字化程度越来越高,出现了大量的计算机系统,如固定资产 管理系统、人事工资管理系统等等。这其中存在大量的MIS系统。MIS系统的一个重要特点是需要处 理大量数据并形成报表H]。由于行业或者其他一些原因,这些报表的格式种类繁多,而且还有一些复 杂报表。这些报表的格式在开发期间可能都无法设定。为了解决这些问题,本文采用了表格功能强大 的Excel作为报表模板,用户可以按照自己的要求设置报表格式,程序运行时再根据用户的设置动态填 人数据,从而实现动态报表功能。 1实现原理 先由用户按照自己的格式生成Excel报表模板,系统读取模板文件,并把模板文件存人数据库,保 存用户输入的报表信息,如某一字段填入第几行第几列。报表打印时,提取相应的Excel文件,利用 Delphi的Excel控件填人数据库的数据,实现动态报表功能。 2实现过程 2.1定义数据袁 系统使用MsSql Server2000数据库,定义两个表,一个是MB,用来存储报表基本信息和Excel文件, 一个是MB—Detail,存放报表的详细信息,如对应字段的行号和列号。表结构如下: 图1 MB表结构 图2 MB—Detail表结构 收稿日期:20l0—11—23 作者简介:余永武.男,四川资中人,内江师范学院讲师.硕士研究,_卜,主要从事网络信息系统方面的研究。
第2期 余永武:在Delphi编程中利用Excel实现动态报表 ・1 15・ MB表中,“模板内容”字段为image类型,用来存储Excel模板文件,“记录类型”字段用来表示是单 张表格(只打印一条记录)还是列表(打印多条记录);MB—Detail表中的列号数据类型为char,对应Ex- cel中的列号如A、B、C…等。 2.2保存和读取Excel模板 2.2.1保存Excel模板 本系统将用户设置好的Excel报表模板存人数据库“模板内容”字段。由于本字段存储的是Excel 文件内容,需要采用特殊的存储方式。本系统使用Delphi的TOleContainer控件,与Excel文件建立连 接,最后存人数据库 ]。因此,先在模板设置界面上放置TOleContainer控件,取名为OExcel,主要代码 如下: Var Stream:TStream;//定义保存文件的流 BeginOExce1.CreateObjectFromFile(edtifle.Text,False); OExce1.DoVe ̄(OExce1.PfimaryVerb); MB.FieldByName(模板名称’.AsString:=ExtraetFileName(edtFile.Text); Stream:=MB.CreateBlobStream(MB.FieldByName(模板内容’,bmWrite); try OExce1.SaveToStream(Stream); inaflly S ̄eam.Free; OExce1.DestroyObject; end; End; 2.2.2读取Excel模板 当需要打印报表时,需要将相应的Excel模板从数据库中读出保存,并用满足要求的数据填充,其 中读出Excel并保存的代码如下: With TSaveDialog.Create(serf)do Be舀n FileName:=trim(MB.FieldByName( 模板名称 ).AsString);//保存的模板的名称 Stream:=MB.CreateBlobStream(MB.FieldByName( 模板内容 ),bmRead);//建立数据库流 try OExce1.LoadFromStream(S ̄eam);//将数据库中的数据读入OleContainer OExce1.OldStreamFormat:=true;//设置保存的格式不变 OExce1.SaveAsDocument(FileName);//将Excel模板文件保存到当前文件夹 inalfly Stream.Free; end; End 2.3 利用TExcelApplication控件实现报表输出 2.3.1存储报表信息 上节中实现了Excel模板的存储与读取,实际上,在保存Excel模板的同时,还要往数据库中存人相 应的模板信息,如某一字段的值存入填入Excel表格中的行号和列号,是打印单行记录还是多条记录 等。具体生成报表信息的界面如图3和图4所示: 图3所示是打印多条记录的情况。这种情况下,只要确定某一字段需要填入模板中的哪一列,因 此,行号不能输入。这种格式主要用于列表式报表。
・l 16・ 安庆师范学院学报(自然科学版) 2011年 图4所示是打印单条记录的情况,需要指出每个字段在Excel中的行号和列号。这种格式主要用 于打印卡片式的报表。 …一_ ≤ — (巍№fd≯ {?薯 ■ 誊 一 ■ 黎l菇氍 瞄 0每聋舞怒象 箍 ^ 翰倍感譬 凌攮鬣 i i l¨ 稃_ 囊: { 。l薯 l i 择拳爨司囔黎 摹秘l誊 量毫}# 捂罾号 婚 t|I性 量 谣 E声广蔫 卑冀 ∞ 向量I{阐 。 i ll1 参_ 曩 。 ∞ # ∞Ⅻg .“誊 t # № 图3打印多条记录 图4打印单条记录 2.3.2报表输出 报表输出需要用到Delphi的TExcelApplication控件 。TExcelApplication控件是Delphi提供的操 作MS Office文档的控件之一,通过它,可以实现在Delphi程序中对Excel文档的相关操作。TExcelAp— plication控件的主要方法有 J: ExcelA:=TExcelApplication.Create(self);//建立控件 ExcelA.Connect;//打开一个Excel应用程序 ExcelA.Visible[0]:=true;//打开的Excel中的Sheetl可见 ExcelA.Workbooks.Open(FileName,EmptyParam,…,0);//打开文件名为FileName的Excel文件 具体的输出代码如下: Stream:=MB.CreateBlobStream(MB.FieldByName(模板内容’,bmRead); O.LoadFromStream(Stream);//从数据库中读出Excel模板 O.SaveAsDocument(FileName);//保存 ExcelA: TExcelApplication.Create(self); ExcelA.Connect; ExcelA.Visible[0]: true; ExcelA.Workbooks.Open (FileName,EmptyParm,EmptayParm,aEmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);//打开 Excel While not DataSet.Eof do//DataSet为输出数据的表 begin MB—DETAIL.First; while not MBbegin DETAIL.Eof do if trim(MB DETAIL.FietdByName( 列号 ).AsString)<> then begin tmpStr:=Trim(DataSet.FieldByName(trim(MB~DETAIL.FieldByName( 字段名 ).As- String)).AsString);
第2期 row::MB余永武:在Delphi编程中利用Excel实现动态报表 ・1l7・ DETAIL.FieldByName(列号 .asString+inttostr(RBegin); ExcelA.Range[row,row].Select; ExcelA.ActiveCel1.FormulaR1 C1:=tmpstr; end; MBDETAIL.Next; end; Inc(RBegin); DataSet.Next; if not DataSet.Eof then ExcelA.Range[一a+inttostr(RBegin), z +inttostr(RBegin)].Insert(xlDown,0);//按模板格 式新建一行 end; 3结论 在Delphi中可以使用多种报表工具完成报表的设计和打印,但大多数报表工具都太专业,普通用 户使用有一定困难。Excel是使用非常广泛的办公软件,简单易学,通过Excel与Delphi结合,可以设计 出非常复杂的报表格式,完全实现报表的动态生成与输出。本文使用的方法已经在最近开发的设备管 理系统中使用,用户反映良好。 参考文献: [1]李存斌,汪兵.Delphi深度编程及其项目应用开发[M].北京:中国水利水电出版社,2002. [2]王振江.Delphi 2005精彩编程百例[M].北京:中国水利水电出版社,2006. [3]方朝晖.Excel与可视化软件开发工具协同制作特殊报表[J].安庆师范学院学报(自然科学版),1999,5(4):70—71. [4]王小华.Delphi程序员经验点滴——桌面、网络编程实例集锦[M].北京:兵器工业出版社,北京希望电子出版社,2006 Implementing Dynamic Report Using Excel in Delphi Programming YU Yong—WU (College of Computer Science,Neijiang Normal University,Neijiang,Sichuan 641112,China) Abstract:As a RAP tool,Delphi has powerful functions in interface design and database programming,and it is a powerful tol in MIS’S development.However,Delphi has cert ̄n limitation in dynamic report,and offers flexible print which is very impor- rant function for MIS system.This paper uses Delphi Excel components.and makes good use of the prior Excel report template to implement SOme complex irregular reports and then to improve the flexibility of he stystem. Key words:dynamic repor,MIS,Delphi,C/S
版权声明:本文标题:在Delphi编程中利用Excel实现动态报表 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1702742400h428954.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论