在DELPHI中将多表头数据表引入到EXCEL中的实践.doc_第1页
在DELPHI中将多表头数据表引入到EXCEL中的实践.doc_第2页
在DELPHI中将多表头数据表引入到EXCEL中的实践.doc_第3页
在DELPHI中将多表头数据表引入到EXCEL中的实践.doc_第4页
在DELPHI中将多表头数据表引入到EXCEL中的实践.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在DELPHI中将多表头数据表引入到EXCEL中的实践2005年第5期福建电脑79在DELPHI中将多表头数据表引入到EXCEL中的实践杜海(电子科技大学计算机学院四川成都610054)【摘要】Eh11b控件是当前DELPHI编程中最流行的表格和报表制作工具,Ehl1b控件中的dbgr1deh是在DELPHI中表格制作具有复杂表头时的有力工具,Excel是当前最流行的处理数据报表的工具.本文介绍如何使这两种工具有力的结合起来.解决复杂表头导入到EXCEL中来的问题.【关键字】Delph1,Dbgr1deh,Excel,报表,Vcl架构1引言数据报表作为企事业单位上报和下达的重要信息载体,随着信息化建设的不断推进,在实际的工作中得到了前所未有的应用.因此,数据报表已经成为管理信息系统中重要的一项功能.并且.由于数据的多样性和统计信息的增加,数据报表的系统实现变得越来越复杂.Delphi是一个效的可视化数据库管理信息系统开发工具.但是Delphi开发环境中提供的报表控件在制作复杂报表时显得不够理想,不管是以前版本提供的QuickReport控件组,还是Delphi7提供的Rave控件组.都不能让用户对生成的报表进行改动.且程序控制很难实现.Excel作为现代办公常用的电子表格制作工具,以它的易操作性和实用性,得到了各行业办公人员的青睐.在我为四川I省计生委开发报表系统过程中.选择了Ehilb控件中的Dbgrideh来作为数据录入的介面.之所以选择它是因为它具有表示多表头的功能,在录入时显得非常的形象化,介面也显得非常的华丽,但是它的报表打印功能很欠缺.而且在实际工作中.根据客户要求常常需要EXCEL的格式的报表及数据表输出.因此.我觉得把多表头数据表引入到EXCEL中成为了非常迫切的要求.但是Ehilb控件所提供的功能非常之有限.根本无法按我的想法输出多表头到EXCEL中来.这就要求对Ehilb控件的VCL架构进行研究.在我深入研究了一段时问之后,终于找到解决这个问题办法.2对Ehilb控件进行改造2.1原来程序存在的问题在Ehilb控件DBGfidEhlmpEx中TDBGridEhExportAsXLSWriteTide方法中只是简单的把表头按表格的Caption属性输出,没有层次和内容的结构体现.procedureTDBGridEhExportAsXLS.WriteTifle(ColurunsList:TColumnsEhList);v&ri:Integer;,beginfori:=0IoColurmmList.Count一1d0bemnWriteStringCell(ColumnsListi.Title.Caption);end;end;而我想要得到的是如同程序中录入时的介面(如图1)一样的EXCLE文件,显然它不能满足这点.鬻蠢薹I:?.冀I鼍蘧图12,2对该方法进行改造通过对Ehilb控件仔细的研究,以及其中方法,函数的揣摩.对该方法进行了改造.procedureTDBGridEhExportAsX1.S.WriteTide(ColumnsList:TColumnsEhList);8fi.k.Integer;,FPTideExpArr:PTideExpArr;ListOtHeadTreeNodeList:TLisl:ColSpan,RowSpan:Integer;,strI:String;L:W0rd;beginifColumnsLis1.Count=0thenExit;FR0w:=0:让DBGridEh.UseMuhiTidethen/多表头输出begintryCreateMuhiTifleMatrixBGridEh.ColumnsLisLFPTideExpArr.istOtHeadTreeNodeList);/将表头数据导入树状结构的列表中fork:=ListOtHeadTreeNodeLis1.C伽ntldownto0dobeginfori:=0toColumnsList.Countld0beginCaleSpan(ColumnsList.ListOtHeadTreeNodeList.k.i.ColSpan,RowSpan);/计算跨列数跨行数ifTHeadTreeNodeOLislstOtHeadTreeNodeList.Itemsk).Itemsi)onilthenbeginstrl:=THeadTreeNode(Ilfist(ListOtHeadTreeNodeList.hemsk).Itemsi).Text+inuo*a-(mwspan)+inttostColSpan);/在有数据的表头位置输出表头数据及跨列数跨行数endelsebeginstrh=;/,在没有数据的表头位置以空格输小end;L:=Length(str1);CXIsLabel11:=8+kCXlsLabe1121:=FRow;CXlsLabel31.FCol,CXlsLabel51.kStream.WriteBuffer(CXh1.abe1.S;zeOf(CXlsLabe1);Stream.WrlteBuffer(Pointetr1),L):/将表头数据作为字符串格式输入到文件流中FCoh=FCol+l,/ColSpan;end;Ine(FRow);feoh=O;end;finallyfori_.0IOLislOtHeadTieeNodeLis1.Countld0TusL(IJstOtHeadTreeNodeList.Itemsi).Free;ListOtHeadTreeNodeLis1.Free;end;endelse/没有多表头的表格数据输出begmfori:=0toColumnsListCount一1dobegm福建电脑2005年第5期WriteStfingCell(ColumnsIAsti.Ti.Captiou);end;end;end;然后在程序中用如下程序输出procedureTFbblum.n3Click(Sender:TObjeet);vatExpClass:TDBGridEhExportClass;Ext:String;SaveDlg:TSaveDialog;.ExportAll:Boolean;beginExportAU:=Tme;SaveDlg:=TSaveDialog,Create(Application);SaveDlg.Filter:.=Excel(*XLS)I*.XLS;SaveDlg.FileName:=表一(出生表);SaveDlg.Options:=【ofOverwritePrompt,ofHideReadOnly,ofEnableSizing;ifSaveDlg.ExecutethenbeginExpClass:=TDBGridEhExportAsXLS;Ext:=sis:endExpClass:nil;Ext:=:end;ifExpClassnilthenbeginifUpperCase(copy(SaveDlg.FfleName,Length(SaveDlg.FaeName)-2,311UpperCase(Ext)thenSaveDlg.FileName:=SaveDlg.FileName+.+Ext;ifdbgrideh2.Selection.SelectionType<>gstNonthenExportAll:=False;TrySaveDBGridEhToExportFileCExpClass,dbgrideh2,SaveDlg.FileName,ExportAu);ExceptOnE:ExceptiondobeginMessageBox(0,LPCTSTR(somethingwrong!,),?,MB一0KorMB_IC0NWARNING1:/Exit;end;End;end;end;end;了:便可以得到如图2的反映多表头层次结构的EXCEL文件图2这时问题已经几乎解决了.因为已经得到表头的层次结构和跨列数跨行数.接下来只是利用控制EXCEL的方法来使单元格合并了.3控制EXCEL进行单元格合并拘于篇幅,下面的工作只进行简单的介绍了,所用的知识不是本文重点阐述的.3.1创建Excel文件先创建一个OLE对象.然后在对象中建立工作表worksheet:VarExeelApp:Variant;ExcelApp:=CreateOle0bjt(Exce1.Application);3.2打开工作簿:ExcelApp.WorkBooks.Open(SavcDlg.FileName);3.3从单元格中得到表头数据和跨列数跨行数.进行单元格合并range:=sheet.rangesheet.cells1Jl.sheet.cells1+colspand+rowspan;range.select;range.merge;,合并单元格range.Horizonta1.Alignment=xlCenterrange.VertiealAlignment=xlCenterrange.WrapText=True/式mnge.borders.1inestyle:-xlcontinuous;/置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论