资源描述:
《在delphi中将多表头数据表引入到excel中的实践》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在DELPHI中将多表头数据表引入到EXCEL中的实践2005年第5期福建电脑79在DELPHI中将多表头数据表引入到EXCEL中的实践杜海(电子科技大学计算机学院四川成都610054)【摘要】Eh11b控件是当前DELPHI编程中最流行的表格和报表制作工具,Ehl1b控件中的dbgr1deh是在DELPHI中表格制作具有复杂表头时的有力工具,Excel是当前最流行的处理数据报表的工具.本文介绍如何使这两种工具有力的结合起来.解决复杂表头导入到EXCEL中来的问题.【关键字】Delph1,Dbgr1deh,Excel,报表,Vcl架构1引言数据报表作为企事业单
2、位上报和下达的重要信息载体,随着信息化建设的不断推进,在实际的工作中得到了前所未有的应用.因此,数据报表已经成为管理信息系统中重要的一项功能.并且.由于数据的多样性和统计信息的增加,数据报表的系统实现变得越来越复杂.Delphi是一个效的可视化数据库管理信息系统开发工具..但是Delphi开发环境中提供的报表控件在制作复杂报表时显得不够理想,不管是以前版本提供的QuickReport控件组,还是Delphi7提供的Rave控件组.都不能让用户对生成的报表进行改动.且程序控制很难实现.Excel作为现代办公常用的电子表格制作工具,以它的易操作性和实用性,得到了各
3、行业办公人员的青睐.在我为四川I省计生委开发报表系统过程中.选择了Ehilb控件中的Dbgrideh来作为数据录入的介面.之所以选择它是因为它具有表示多表头的功能,在录入时显得非常的形象化,介面也显得非常的华丽,但是它的报表打印功能很欠缺.而且在实际工作中.根据客户要求常常需要EXCEL的格式的报表及数据表输出.因此.我觉得把多表头数据表引入到EXCEL中成为了非常迫切的要求.但是Ehilb控件所提供的功能非常之有限.根本无法按我的想法输出多表头到EXCEL中来.这就要求对Ehilb控件的VCL架构进行研究.在我深入研究了一段时问之后,终于找到解决这个问题办法
4、.2对Ehilb控件进行改造2.1原来程序存在的问题在Ehilb控件DBGfidEhlmpEx~中TDBGridEhExportAsXLSWriteTide方法中只是简单的把表头按表格的Caption属性输出,没有层次和内容的结构体现.procedureTDBGridEhExportAsXLS.WriteTifle(ColurunsList:TColumnsEhList);v—&ri:Integer;,beginfori:=0IoColurmmList.Count一1d0bemnWriteStringCell(ColumnsList[i].Title.
5、Caption);end;end;而我想要得到的是如同程序中录入时的介面(如图1)一样的EXCLE文件,显然它不能满足这点.鬻蠢薹I:?'.冀I鼍蘧图12,2对该方法进行改造通过对Ehilb控件仔细的研究,以及其中方法,函数的揣摩.对该方法进行了改造.procedureTDBGridEhExportAsX1.S.WriteTide(ColumnsList:TColumnsEhList);~8fi.k.Integer;,FPTideExpArr:PTideExpArr;ListOtHeadTreeNodeList:TLisl:ColSpan,RowSpan:In
6、teger;,strI:String;L:W0rd;beginifColumnsLis1.Count=0thenExit;FR0w:=0:让DBGridEh.UseMuhiTidethen//多表头输出begintryCreateMuhiTifleMatrixBGridEh.ColumnsLisLFPTideExpArr.istOtHeadTreeNodeList);//将表头数据导入树状结构的列表中fork:=ListOtHeadTreeNodeLis1.C伽nt—ldownto0dobeginfori:=0toColumnsList.Count—ld0be
7、ginCaleSpan(ColumnsList.ListOtHeadTreeNodeList.k.i.ColSpan,RowSpan);//计算跨列数跨行数ifTHeadTreeNodeO'LislstOtHeadTreeNodeList.Items[k]).Items[i])onilthenbeginstrl:=THeadTreeNode('Ilfist(ListOtHeadTreeNodeList.hems[k]).Items[i]).Text+inuo*a-(mwspan)+inttostColSpan);//在有数据的表头位置输出表头数据及跨列数跨行数
8、endelsebeginstrh=;/