在DELPHI中將多表頭數(shù)據(jù)表引入到EXCEL中的實(shí)踐.doc_第1頁
在DELPHI中將多表頭數(shù)據(jù)表引入到EXCEL中的實(shí)踐.doc_第2頁
在DELPHI中將多表頭數(shù)據(jù)表引入到EXCEL中的實(shí)踐.doc_第3頁
在DELPHI中將多表頭數(shù)據(jù)表引入到EXCEL中的實(shí)踐.doc_第4頁
在DELPHI中將多表頭數(shù)據(jù)表引入到EXCEL中的實(shí)踐.doc_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

在DELPHI中將多表頭數(shù)據(jù)表引入到EXCEL中的實(shí)踐2005年第5期福建電腦79在DELPHI中將多表頭數(shù)據(jù)表引入到EXCEL中的實(shí)踐杜海(電子科技大學(xué)計(jì)算機(jī)學(xué)院四川成都610054)【摘要】Eh11b控件是當(dāng)前DELPHI編程中最流行的表格和報(bào)表制作工具,Ehl1b控件中的dbgr1deh是在DELPHI中表格制作具有復(fù)雜表頭時(shí)的有力工具,Excel是當(dāng)前最流行的處理數(shù)據(jù)報(bào)表的工具.本文介紹如何使這兩種工具有力的結(jié)合起來.解決復(fù)雜表頭導(dǎo)入到EXCEL中來的問題.【關(guān)鍵字】Delph1,Dbgr1deh,Excel,報(bào)表,Vcl架構(gòu)1引言數(shù)據(jù)報(bào)表作為企事業(yè)單位上報(bào)和下達(dá)的重要信息載體,隨著信息化建設(shè)的不斷推進(jìn),在實(shí)際的工作中得到了前所未有的應(yīng)用.因此,數(shù)據(jù)報(bào)表已經(jīng)成為管理信息系統(tǒng)中重要的一項(xiàng)功能.并且.由于數(shù)據(jù)的多樣性和統(tǒng)計(jì)信息的增加,數(shù)據(jù)報(bào)表的系統(tǒng)實(shí)現(xiàn)變得越來越復(fù)雜.Delphi是一個(gè)效的可視化數(shù)據(jù)庫管理信息系統(tǒng)開發(fā)工具.但是Delphi開發(fā)環(huán)境中提供的報(bào)表控件在制作復(fù)雜報(bào)表時(shí)顯得不夠理想,不管是以前版本提供的QuickReport控件組,還是Delphi7提供的Rave控件組.都不能讓用戶對生成的報(bào)表進(jìn)行改動.且程序控制很難實(shí)現(xiàn).Excel作為現(xiàn)代辦公常用的電子表格制作工具,以它的易操作性和實(shí)用性,得到了各行業(yè)辦公人員的青睞.在我為四川I省計(jì)生委開發(fā)報(bào)表系統(tǒng)過程中.選擇了Ehilb控件中的Dbgrideh來作為數(shù)據(jù)錄入的介面.之所以選擇它是因?yàn)樗哂斜硎径啾眍^的功能,在錄入時(shí)顯得非常的形象化,介面也顯得非常的華麗,但是它的報(bào)表打印功能很欠缺.而且在實(shí)際工作中.根據(jù)客戶要求常常需要EXCEL的格式的報(bào)表及數(shù)據(jù)表輸出.因此.我覺得把多表頭數(shù)據(jù)表引入到EXCEL中成為了非常迫切的要求.但是Ehilb控件所提供的功能非常之有限.根本無法按我的想法輸出多表頭到EXCEL中來.這就要求對Ehilb控件的VCL架構(gòu)進(jìn)行研究.在我深入研究了一段時(shí)問之后,終于找到解決這個(gè)問題辦法.2對Ehilb控件進(jìn)行改造2.1原來程序存在的問題在Ehilb控件DBGfidEhlmpEx中TDBGridEhExportAsXLSWriteTide方法中只是簡單的把表頭按表格的Caption屬性輸出,沒有層次和內(nèi)容的結(jié)構(gòu)體現(xiàn).procedureTDBGridEhExportAsXLS.WriteTifle(ColurunsList:TColumnsEhList);v&ri:Integer;,beginfori:=0IoColurmmList.Count一1d0bemnWriteStringCell(ColumnsListi.Title.Caption);end;end;而我想要得到的是如同程序中錄入時(shí)的介面(如圖1)一樣的EXCLE文件,顯然它不能滿足這點(diǎn).鬻蠢薹I:?.冀I鼉蘧圖12,2對該方法進(jìn)行改造通過對Ehilb控件仔細(xì)的研究,以及其中方法,函數(shù)的揣摩.對該方法進(jìn)行了改造.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);/將表頭數(shù)據(jù)導(dǎo)入樹狀結(jié)構(gòu)的列表中fork:=ListOtHeadTreeNodeLis1.C伽ntldownto0dobeginfori:=0toColumnsList.Countld0beginCaleSpan(ColumnsList.ListOtHeadTreeNodeList.k.i.ColSpan,RowSpan);/計(jì)算跨列數(shù)跨行數(shù)ifTHeadTreeNodeOLislstOtHeadTreeNodeList.Itemsk).Itemsi)onilthenbeginstrl:=THeadTreeNode(Ilfist(ListOtHeadTreeNodeList.hemsk).Itemsi).Text+inuo*a-(mwspan)+inttostColSpan);/在有數(shù)據(jù)的表頭位置輸出表頭數(shù)據(jù)及跨列數(shù)跨行數(shù)endelsebeginstrh=;/,在沒有數(shù)據(jù)的表頭位置以空格輸小end;L:=Length(str1);CXIsLabel11:=8+kCXlsLabe1121:=FRow;CXlsLabel31.FCol,CXlsLabel51.kStream.WriteBuffer(CXh1.abe1.S;zeOf(CXlsLabe1);Stream.WrlteBuffer(Pointetr1),L):/將表頭數(shù)據(jù)作為字符串格式輸入到文件流中FCoh=FCol+l,/ColSpan;end;Ine(FRow);feoh=O;end;finallyfori_.0IOLislOtHeadTieeNodeLis1.Countld0TusL(IJstOtHeadTreeNodeList.Itemsi).Free;ListOtHeadTreeNodeLis1.Free;end;endelse/沒有多表頭的表格數(shù)據(jù)輸出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的反映多表頭層次結(jié)構(gòu)的EXCEL文件圖2這時(shí)問題已經(jīng)幾乎解決了.因?yàn)橐呀?jīng)得到表頭的層次結(jié)構(gòu)和跨列數(shù)跨行數(shù).接下來只是利用控制EXCEL的方法來使單元格合并了.3控制EXCEL進(jìn)行單元格合并拘于篇幅,下面的工作只進(jìn)行簡單的介紹了,所用的知識不是本文重點(diǎn)闡述的.3.1創(chuàng)建Excel文件先創(chuàng)建一個(gè)OLE對象.然后在對象中建立工作表worksheet:VarExeelApp:Variant;ExcelApp:=CreateOle0bjt(Exce1.Application);3.2打開工作簿:ExcelApp.WorkBooks.Open(SavcDlg.FileName);3.3從單元格中得到表頭數(shù)據(jù)和跨列數(shù)跨行數(shù).進(jìn)行單元格合并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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論