999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種通用報表的設計和實現

2010-04-12 00:00:00日,薛慧君
現代電子技術 2010年18期

摘 要:提出一種通用報表的設計和實現方法,在信息管理系統設計中,查詢數據通常需要以報表的形式輸出,設計了一個非常實用的函數,采用OLE自動化技術,通過程序代碼實現對Excel文檔的各種編輯功能,并應用于一類通用報表的設計和輸出。設計的函數接口簡單、易于調用,可以大大減少信息系統開發中一類通用報表的設計工作量,可重用性高。該方法已經應用于多個實際應用系統的開發和設計。在此詳盡分析和闡述了通用報表的設計和實現,并給出了該函數的主要代碼。關鍵詞:通用報表; 信息管理系統; 函數調用; Excel報表格式

中圖分類號:TN911-34; TP31152文獻標識碼:A

文章編號:1004-373X(2010)18-0069-03

Design and Implementation of General Two-dimensional Report

XU Ri1, XUE Hui-jun2

(1.Department of Computer Science, Inner Mongolia Business Trade Vocational College, Hohhot 010010, China;

2.Department of Computer Science, Inner Mongolia Electronic Information Vocational Technical College, Hohhot 010010, China)

Abstract: The design and implementation methods of a general report are proposed. The data of MIS is usually outputed in a report mode during the design of information management system. Various edition functions for Excel files were realized with OLE automatization technology and program code. They are applied to the design and output of the first class common report. The designed function interface is simple and easy to be called, and can greatly reduce the design work of the common report in the development of information systems, this method has been applied to the development and design of many application systems. The detailed analysis and elaboration on design and implementation of a kind of general report are offered. The main codes of this function are also provided.Keywords: common report; information management system; function call; Excel report format

0 引 言

軟件設計和開發過程中,一般都要求數據的輸出,并且以報表的形式進行展示。一般的軟件設計開發工具都提供設計報表的工具和組件,常用的開發工具有微軟的VS系列,Borland 系列等設計工具都提供報表設計功能,但是都需要軟件開發者采用定制的形式逐個進行設計,而一般的MIS系統都有為數不少的報表設計工作,并且報表形式大多是通用的數據報表,部分為圖表結合的報表、三維報表以及其他形式的報表。在工程實踐過程中,逐個設計報表需要很大的工作,一旦需要修改,則逐個修改的工作量很大,存在重復設計和維護問題。

文獻[1-9]提出的報表設計方法,基本側重在設計技術和技巧,或者是定義報表組件[5]方面,其特點是功能多,使用較為復雜,部分也直接輸出為Excel報表格式[6,9]。本文主要針對的情況是在信息系統中,各種查詢的數據一般都是展示在界面窗口中,顯示的格式已經帶有二維報表的特性,帶有標題、列標題和數據等。本文在軟件工程開發實踐中,利用OLE自動化技術,使用Microsoft VBA接口,直接把顯示柵格中的數據,直接以Excel報表的格式輸出。這種報表具有通用性強,使用非常簡單。同時可以利用Excel的功能進行報表格式的控制。本文以Borland Dephi6.0(或以上版本)進行闡述實現的原理,并給出實現的步驟和代碼。

1 通用報表分析

1.1 報表的數據

報表的數據一般從單個或多個數據庫表中獲取,而一般通過SQL查詢語句得到數據。通常在MIS系統設計上,往往都是先顯示在窗口界面,然后輸出打印。所以無論什么形式的數據總是先顯示在窗口界面的數據柵格中,如Delphi中通常用TDBGid或TStringGrid中。因此可以直接把顯示在Grid中的數據直接為報表數據輸出即可。而TDBGrid通過TDatasource獲得現實的數據源,TDataSource的通過TDateset取得數據,TDataset有3種數據形式:TTable,TQuery和TStoreProcedure。而TTable完全使用簡單的TQuery可以實現并代替。TQuery通過SQL語句提取數據庫中的數據,SQL語句極為靈活,可以完成很多包括統計、排序、多表操作等各種功能,而Select類的SQL語句返回的數據均為二維數據。

1.2 報表的顯示格式

一般通用的二維報表包括標題、副標題、列標題、數據行、表尾等幾個部分,當然也有很多復雜的報表,但是復雜的報表一般都需要設計和定制。而本文需要解決的正式這種簡單的而又通用的二維報表,可以通過簡單的函數調用即可完成。

2 報表設計的實現

本文以Delphi開發環境下,Borland Delphi中調用Excel的方式有4種方式,見文獻[10]的相關章節。這里使用以Variant變量的方式來調用Excel。具體的方法可以參見GridToExcel函數中的代碼。

函數體中控制輸入和設置Excel的各種屬性等操作,需要操作Excel文件的接口文件ExcelTLB.pas。該文件提供了編程操作Excel的Delphi接口類庫,需要Microsoft Office環境下,通過Delphi提供的導入類庫來實現,具體操作步驟為:打開Delphi,點擊Project菜單下的“Import Type Library…”,在彈出對話框中,點擊“Add…”按鈕,從office安裝的文件夾找到xl5chs32.olb文件,然后點擊“Create Unit”即生成ExcelTLB.pas文件,把生成的ExcelTLB.pas文件另存到項目的文件夾以備使用。本文實現的函數(GridToExcel)所在單元必須在USES部分加入ExcelTLB單元。

3 報表輸出函數實現

這里給出了表格輸出函數的設計步驟和代碼。函數名稱為GridToExcel,參數有grid類型為TDBGrid,xlfile:string為Excel輸出的文件名,報表標題T1:string。函數返回值為輸入的報表數據行數。函數使用的局部變量如下:

var xlApp:Variant;//Excel對象

i,j:integer;irow,icol:integer;//循環控制變量

函數體分為以下幾個部分。

(1) 創建Excel自動化對象,代碼如下:

//判斷Grid是否有數據,無則直接返回

if (not grid.DataSource.DataSet.Active) or (grid.Datasource.Dataset.RecordCount=0) then exit;

Try

xlapp:=createoleobject(′Excel.application′);

xlapp.workbooks.Add(-4167);

xlapp.visible:=true;

Except

showmessage(′未安裝Microsoft Excel!請安裝!′);exit;

end;

(2) 填充標題到Excel對象,代碼如下:

irow:=grid.DataSource.DataSet.RecordCount;

icol:=0;

for i:=0 to grid.Columns.Count-1 do begin

if grid.Columns[i].Visible then//隱藏列不顯示

begin

inc(icol); xlapp.cells[TitleLines+1,Icol]:=grid.Columns[i].Title.Caption;

end;

end;

(3) 設置Excel報表顯示的標題行格式:

For i:=1 to TitleLines do begin

xlapp.activesheet.cells[i,1]:=Titles[i];xlapp.activesheet.range[′A′+IntToStr(i)+′:′+chr(64+icol)+IntToStr(i)].select;

xlapp.selection.HorizontalAlignment:= xlCenter;

xlapp.selection.VerticalAlignment:= xlCenter;

xlapp.selection.MergeCells := True;

//設置標題字體大小

if i=1 then begin

xlapp.selection.RowHeight:=26;

xlapp.selection.Font.size:=18;

end else begin

xlapp.selection.RowHeight:=20;

xlapp.selection.Font.size:=12;

end;

end;

(4) 設置表格線:

//設置表格線;

xlapp.activesheet.range[′A′+IntTostr(TitleLines+1)+′:′+chr(64+icol)+Inttostr(irow+TitleLines+1)].select;

with xlapp.selection do begin

Borders[xlEdgeBottom].linestyle:=xlContinuous;

Borders[xlEdgetop].linestyle:=xlContinuous;

Borders[xlEdgeright].linestyle:=xlContinuous;

Borders[xlEdgeLeft].linestyle:=xlContinuous;

End;

(5) 把Grid中的數據填到Excel中:

grid.DataSource.DataSet.First;

i:=TitleLines+2;

while not grid.DataSource.DataSet.Eof do begin

icol:=0;

for j:=1 to grid.Columns.Count do begin

if grid.Columns[j-1].Visible then begin

inc(icol);

xlapp.cells[i,icol]:=grid.Columns[j-1].Field.DisplayText;end;

end;

grid.DataSource.DataSet.Next; inc(i);

end;

(6) 調整Excel的列寬度自適應寬度:

For i:=1 to icol do begin

xlapp.activesheet.Columns[i].select;

xlapp.activesheet.Columns[i].EntireColumn.AutoFit;

end;

(7) 保存報表為指定的Excel文件名

xlapp.activesheet.cells[1,1].select;

xlapp.workbooks[1].SaveAs(xlfile);

4 使用實例

上述的函數完全可以加入到設計系統的Delphi項目中,并作為通用的函數,加入到通用函數庫單元中,需要在函數所在單元的USES部分加入上述的ExcelTLB單元。如系統地把圖書系統的查詢結果輸出到報表,只需要在查詢界面中增加一個按鈕,按鈕點擊事件代碼如下。就可以生成生成一個Excel二維報表。

procedure TBookSearchForm.ReportBtnClick(Sender: TObject);

begin

dmf.SaveDialog1.Filter:=′Excel文件(*.xls)| *.xls|所有文件(*.*)|*.*′;

if dmf.SaveDialog1.Execute then

begin GridToExcel(dmf.SaveDialog1.FileName,DBGrid1,′圖書查詢結果表′);

end;

end;

5 結 語

報表制作是MIS系統開發過程的一個重要的部分,許多通用的報表制作工具都提供了很大的功能支持,但是對于設計者而言都需要逐個設計,且工作繁瑣,維護工作量大。本文詳細闡述了通過一個簡單的函數實現簡單報表功能,可以給一類簡單的二維報表輸出提供很方便的調用。提供了完整的Delphi函數實現代碼,可以把其封裝為DLL庫的方式,供其他編程開發工具調用。該報表輸出方法已經在開發的“XX汽車維修企業信息系統”、“出版社圖書信息管理”等多個MIS系統得到應用,提高了報表設計的效率。

參考文獻

[1]李迎春,孫學波.非交互式報表生成器組件的設計和實現[J].計算機工程與設計,2009,30(10):2558-2560,2563.

[2]李興勇,袁兆山,汪正海.復雜報表生成系統實現技術研究[J].計算機應用,2007(7):1821-1824.

[3]艾永亮.一種新的通用報表模型的研究與實現[J].現代電子技術,2007,30(4):172-173,180.

[4]劉紀敏.基于ActiveX控件與SQL查詢的通用報表軟件設計[J].計算機應用與軟件,2005,22(4):134-135.

[5]金雨,張旭堂,劉文劍.用戶自定義通用報表打印的設計與實現[J].計算機應用與軟件,2008,25(3):132-134.

[6]管建和,王紹燕.基于ATL實現通用報表工具COM控件[J].計算機工程與設計,2007,28(17):4241-4242,4256.

[7]高鵬.基于動態DW+Formula1技術的集成式通用報表模型研究[J].計算機應用與軟件,2009,26(11):137-140.

[8]王勇超,張璟,馬靜,等.利用XML和Excel設計動態通用報表系統的新方法[J].現代電子技術,2008,31(18):93-96.

[9]周一,王世耕,黃忠全,等.基于FastReport的通用報表系統的設計與實現[J].計算機應用與軟件,2008,25(2):284-285.

[10]Charlie Calvert. Delphi5編程技術內幕[M].北京:機械工業出版社,2003.

主站蜘蛛池模板: 2021国产精品自产拍在线观看| 久久女人网| 美女国产在线| 欧美成人综合在线| 99久久精品免费视频| 亚洲精品无码久久久久苍井空| 日本在线免费网站| 欧美专区日韩专区| 亚洲aaa视频| 日韩无码视频播放| av在线无码浏览| 国产激情无码一区二区APP| 免费AV在线播放观看18禁强制| 精品国产99久久| 久久99国产综合精品1| 97在线观看视频免费| A级毛片无码久久精品免费| 亚洲精品视频免费看| 亚洲天堂免费在线视频| 久草性视频| 玖玖免费视频在线观看| 永久免费AⅤ无码网站在线观看| 人妻少妇久久久久久97人妻| 亚亚洲乱码一二三四区| 亚欧成人无码AV在线播放| 中日无码在线观看| 日本91视频| 四虎影视8848永久精品| 欧美中文字幕一区| 亚洲av无码牛牛影视在线二区| 亚洲成人黄色网址| 久久国产V一级毛多内射| 宅男噜噜噜66国产在线观看| 伊人AV天堂| 有专无码视频| 手机成人午夜在线视频| 国产精欧美一区二区三区| 日韩av电影一区二区三区四区| 国产91精品最新在线播放| 国产一区在线观看无码| 亚洲Av综合日韩精品久久久| 四虎永久免费网站| 欧美天堂在线| 伊人91在线| 国产91九色在线播放| 亚洲第七页| 国产一区二区三区免费| av在线无码浏览| 国产原创自拍不卡第一页| 97在线公开视频| 午夜高清国产拍精品| 在线精品亚洲一区二区古装| 无码内射中文字幕岛国片| www亚洲天堂| 日韩美一区二区| 免费AV在线播放观看18禁强制| 久久天天躁狠狠躁夜夜2020一| 日韩A∨精品日韩精品无码| 一区二区欧美日韩高清免费 | 欧美国产日产一区二区| 精品久久777| 伊人成人在线| 亚洲成人网在线播放| www.99精品视频在线播放| 亚洲乱码视频| 国产日韩欧美成人| 亚洲精品片911| 一区二区三区四区日韩| 91在线一9|永久视频在线| 伊人久综合| 美女免费精品高清毛片在线视| 91小视频在线观看免费版高清| 四虎在线观看视频高清无码| 国产欧美视频一区二区三区| 国产免费福利网站| 中文无码伦av中文字幕| 中文字幕免费视频| 在线播放91| 2022国产91精品久久久久久| 日韩精品成人网页视频在线| 亚洲天堂福利视频| 亚洲中字无码AV电影在线观看|