在Delphi編程中利用Excel實(shí)現(xiàn)動(dòng)態(tài)報(bào)表_第1頁
在Delphi編程中利用Excel實(shí)現(xiàn)動(dòng)態(tài)報(bào)表_第2頁
在Delphi編程中利用Excel實(shí)現(xiàn)動(dòng)態(tài)報(bào)表_第3頁
在Delphi編程中利用Excel實(shí)現(xiàn)動(dòng)態(tài)報(bào)表_第4頁
在Delphi編程中利用Excel實(shí)現(xiàn)動(dòng)態(tài)報(bào)表_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、南京帆軟軟件公司 商務(wù)咨詢電話:86-025-5186 2240 在 Delphi 編程中利用 Excel 實(shí)現(xiàn)動(dòng)態(tài)報(bào)表0 引言隨著計(jì)算機(jī)技術(shù)的不斷普及 , 辦公的數(shù)字化程度越來越高 , 出現(xiàn)了大量的計(jì)算機(jī)系統(tǒng) , 如固定資產(chǎn)管理系統(tǒng)、 人事工資管理系統(tǒng)等等。 這其中存在大量的 MIS 系統(tǒng)。 MIS 系統(tǒng)的一個(gè) 重要特點(diǎn)是需要處理大量數(shù)據(jù)并形成報(bào)表。 由于行業(yè)或者其他一些原因 , 這些報(bào)表的格式種 類繁多 , 而且還有一些復(fù)雜報(bào)表。 這些報(bào)表的格式在開發(fā)期間可能都無法設(shè)定。 為了解決這 些問題 , 本文采用了表格功能強(qiáng)大的 Excel 作為報(bào)表模板 , 用戶可以按照自己的要求設(shè)置報(bào) 表格式

2、, 程序運(yùn)行時(shí)再根據(jù)用戶的設(shè)置動(dòng)態(tài)填入數(shù)據(jù) , 從而實(shí)現(xiàn)動(dòng)態(tài)報(bào)表功能。1 實(shí)現(xiàn)原理先由用戶按照自己的格式生成 Excel 報(bào)表模板 , 系統(tǒng)讀取模板文件 , 并把模板文件存入 數(shù)據(jù)庫 , 保存用戶輸入的報(bào)表信息 , 如某一字段填入第幾行第幾列。 報(bào)表打印時(shí) , 提取相應(yīng) 的 Excel 文件 , 利用 Delphi 的 Excel 控件填入數(shù)據(jù)庫的數(shù)據(jù) , 實(shí)現(xiàn)動(dòng)態(tài)報(bào)表功能。2 實(shí)現(xiàn)過程2. 1 定義數(shù)據(jù)表系統(tǒng)使用 MsSql Server2000數(shù)據(jù)庫 , 定義兩個(gè)表 , 一個(gè)是 MB, 用來存儲報(bào)表基本信息和 Excel 文件 , 一個(gè)是 MB_Detail存放報(bào)表的詳細(xì)信息 , 如對應(yīng)字

3、段的行號和列號。表結(jié)構(gòu)如下 :圖 1 MB 表結(jié)構(gòu) 圖 2 MB _Detail表結(jié)構(gòu)MB 表中 , “模板內(nèi)容” 字段為 image 類型 , 用來存儲 Excel 模板文件 , “記錄類型”字段用 來表示是單張表格 (只打印一條記錄 還是列表 (打印多條記錄 ; MB Detail表中的列號數(shù)據(jù) 類型為 char, 對應(yīng) Excel 中的列號如 A 、 B 、 C 等。2. 2 保存和讀取 Excel 模板2. 2. 1 保存 Excel 模板本系統(tǒng)將用戶設(shè)置好的 Excel 報(bào)表模板存入數(shù)據(jù)庫“模板內(nèi)容”字段。由于本字段存儲 的是 Excel 文件內(nèi)容 , 需要采用特殊的存儲方式。 本系

4、統(tǒng)使用 Delph i 的 TO leContainer 控件 , 與 Excel 文件建立連接 , 最后存入數(shù)據(jù)庫。因此 , 先在模板設(shè)置界面上放置 TO leContainer控件 , 取名為 OExcel ,主要代碼如下 :V ar Stream: TS tream; / /定義保存文件的流Beg inOExce.l C reateOb jectFromF ile( edtfile. Tex ,t Fa lse;OExce.l DoV erb( OExce.l Prim aryV erb;MB. FieldByName(模板名稱 . As String : = ExtractFileNa

5、me(edtFile.Text; Stream: = MB. CreateB lobStream (MB. Fie ldByName( ' 模板內(nèi)容 ', bmW rite ;南京帆軟軟件公司商務(wù)咨詢電話:86-025-5186 2240 tryOExcel SaveToS tream(Stream;finallyStream. Free;OExcel DestroyObject;end;End;2. 2. 2 讀取 Excel 模板當(dāng)需要打印報(bào)表時(shí) , 需要將相應(yīng)的 Exce l模板從數(shù)據(jù)庫中讀出保存 , 并用滿足要求的 數(shù)據(jù)填充 , 其中讀出 Excel 并保存的代碼如下

6、:With TSaveDialog. Create(self doBeginFileName : = trim(MB.FieldByN ame(模板名稱 . AsString ; / /保存的模板的 名稱Stream: = MB. CreateBlobStream (MB. Fie ldByName(模板內(nèi)容 , bmRead;/ /建立數(shù)據(jù)庫流tryOExce.l LoadFromS tream( Stream ; / /將數(shù)據(jù)庫中的數(shù)據(jù)讀入 O leConta iner OExce.l O ldStreamForm at: = true;/ /設(shè)置保存的格式不變OExce.l SaveA

7、sDocument( FileName;/ /將 Excel 模板文件保存到當(dāng)前文件夾 fina llyS tream. Free;end;End2. 3 利用 TExcelApplication 控件實(shí)現(xiàn)報(bào)表輸出2. 3. 1 存儲報(bào)表信息上節(jié)中實(shí)現(xiàn)了 Excel 模板的存儲與讀取 , 實(shí)際上 , 在保存 Excel 模板的同時(shí) , 還要往數(shù)據(jù) 庫中存入相應(yīng)的模板信息 , 如某一字段的值存入填入 Excel 表格中的行號和列號 , 是打印單 行記錄還是多條記錄等。具體生成報(bào)表信息的界面如圖 3和圖 4所示 :圖 3所示是打印多條記錄的情況。這種情況下 , 只要確定某一字段需要填入模板中的哪

8、一列 , 因此 , 行號不能輸入。這種格式主要用于列表式報(bào)表。圖 4所示是打印單條記錄的情況 , 需要指出每個(gè)字段在 Excel 中的行號和列號。 這種格式 主要用于打印卡片式的報(bào)表。南京帆軟軟件公司 商務(wù)咨詢電話:86-025-5186 2240 圖 3 打印多條記錄 圖 4 打印單條記錄2. 3. 2 報(bào)表輸出報(bào)表輸出需要用到 Delphi 的 TExcelApplication 控件。 TExcelApplication 控件是 Delphi 提供的操作 MS Office文檔的控件之一 , 通過它 , 可以實(shí)現(xiàn)在 Delphi 程序中對 Excel 文檔的 相關(guān)操作。 TExcelAp

9、plication 控件的主要方法有 :ExcelA: = TExcelApplication. Create(self; / /建立控件ExcelA. Connect; / /打開一個(gè) Excel 應(yīng)用程序ExcelA. Visible0 : = true; / /打開的 Excel 中的 Sheet1可見ExcelA. Workbooks. Open( F ileN ame, EmptyParam, , 0; / /打開文件名為 FileN ame 的 Excel 文件具體的輸出代碼如下 :Stream: = MB. CreateBlobStream (MB. FieldByName(模板

10、內(nèi)容 , bmRead ;O. LoadFromStream( Stream ; / /從數(shù)據(jù)庫中讀出 Excel 模板O. SaveA sDocument( FileName; / /保存ExcelA : = TExcelApplication. Create( self;ExcelA.Connect;ExcelA.Visible0 : = true;ExcelA.Workbooks. Open( FileName, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, Empt

11、yParam, EmptyParam,EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0; / /打開ExcelWhile not DataSet Eof do / /DataSet為輸出數(shù)據(jù)的表beginMB DETA IL. First;while not MB DETA IL. Eof dobeginif trim(MB DETA IL. FieldByName(列號 . AsString < > ''thenbegin tmpStr : = Trim ( DataSet FieldByN

12、ame( trim (MB DETA IL. FieldByNam南京帆軟軟件公司商務(wù)咨詢電話:86-025-5186 2240 e(字段名 . As String . AsString ;row : = MB DETA IL. FieldByName(列號 . asString+ inttostr( RBegin ;ExcelA. Range row, row . Select;ExcelA. ActiveCell FormulaR1C1: = tmpstr;end;MB DETA IL. Next;end;Inc( RBegin ;DataSet Next;if not DataSet Eof thenExcelA. Range a + inttostr( RBegin , z + inttostr( RBegin . Insert( xlDown, 0 ; / /按模

溫馨提示

  • 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

提交評論