陳雪蓮
摘 要:嘗試對復(fù)雜報表進(jìn)行結(jié)構(gòu)化描述,利用結(jié)構(gòu)化描述數(shù)據(jù)和自定義的用戶對象提供的接口極大地簡化了復(fù)雜報表的制作,就復(fù)雜報表的結(jié)構(gòu)化描述做了詳細(xì)的描述。
關(guān)鍵詞:結(jié)構(gòu)化;復(fù)雜報表;自動生成
1 引言
在國內(nèi)的數(shù)據(jù)庫應(yīng)用開發(fā)中,復(fù)雜報表的制作始終是一個棘手的問題,這是由報表表現(xiàn)形式的復(fù)雜性和格式、內(nèi)容的靈活性決定的。而常用的開發(fā)工具所生成的報表通常格式簡單、功能單一,對于實際問題中出現(xiàn)的特殊格式,如多層表頭報表,各種票據(jù)格式等,都顯得力不從心。
目前,在數(shù)據(jù)處理和信息管理方面,使用MS Excel制作各種報表非常普及,用戶希望一個使用管理信息系統(tǒng)能將生成的報表導(dǎo)出到Excel中,以進(jìn)一步進(jìn)行加工處理,擴展系統(tǒng)信息處理能力。
為滿足工程項目開發(fā)的實際需要,嘗試對復(fù)雜報表形式進(jìn)行結(jié)構(gòu)化描述,并在此基礎(chǔ)上定義了一個報表生成與excel導(dǎo)出對象類,極大的簡化了復(fù)雜報表的制作。本文就復(fù)雜報表的結(jié)構(gòu)化描述及使用OLE技術(shù)實現(xiàn)復(fù)雜報表生成的原理做了詳細(xì)介紹。
2 復(fù)雜報表結(jié)構(gòu)化模型
2.1 模型原理
復(fù)雜報表結(jié)構(gòu)化模型的原理如圖1所示,報表的結(jié)構(gòu)化描述與自動生成程序從報表結(jié)構(gòu)化描述數(shù)據(jù)庫獲取報表結(jié)構(gòu)信息,從MIS數(shù)據(jù)數(shù)據(jù)庫獲取報表數(shù)據(jù)內(nèi)容,經(jīng)過綜合處理之后,將結(jié)構(gòu)導(dǎo)出到excel文件中,生成目標(biāo)報表。
2.2 復(fù)雜報表結(jié)構(gòu)模型
⑴報表結(jié)構(gòu)化描述模型。為了描述問題的簡潔,本文規(guī)定:
1)縱向位置:對應(yīng)于Excel報表中的列序,起始位置為1,自左向右順序計數(shù);
2)橫向位置:對應(yīng)于Excel報表中的行序,起始位置為1,自上而下順序計數(shù);
3)數(shù)據(jù)標(biāo)題:報表表頭中與表體的某一列有直接對應(yīng)關(guān)系的文字描述標(biāo)題;
4)文本標(biāo)題:報表表頭中描述數(shù)據(jù)標(biāo)題之間關(guān)系,一個文本標(biāo)題可以覆蓋2個或2個以上的數(shù)據(jù)標(biāo)題或文本標(biāo)題,是報表復(fù)雜性的主要表現(xiàn)。
報表結(jié)構(gòu)化描述的數(shù)據(jù)結(jié)構(gòu)定義如下:
Structure stru_head
String HeadID //標(biāo)題的縱向位置描述
Integer Rand //標(biāo)題的橫向位置描述
String HeadText //標(biāo)題顯示文本
Integer ParentRank //父標(biāo)題的橫向位置描述
String HeadName //數(shù)據(jù)標(biāo)題對應(yīng)的字段名
End structure
其中,HeadID的取值定義可以區(qū)分?jǐn)?shù)據(jù)標(biāo)題和文本標(biāo)題,數(shù)據(jù)標(biāo)題HeadID取值為其在報表表體中對應(yīng)的列序,文本標(biāo)題的HeadID的取值由它所覆蓋的所有標(biāo)題的序列中最小與最大兩個序列組成。文本標(biāo)題的Rank等于其在報表表頭中的行序,數(shù)據(jù)標(biāo)題的Rank一律取值為報表表頭的總行數(shù)。標(biāo)題的ParentRank定義為相鄰上層標(biāo)題的行序,如果該標(biāo)題沒有相鄰上層標(biāo)題,則其ParentRank取值為0。
⑵報表結(jié)構(gòu)化描述實例。本文選取一個具有多層表頭的統(tǒng)計報表為例,利用本文提出的復(fù)雜報表結(jié)構(gòu)化描述模型對該報表進(jìn)行結(jié)構(gòu)化描述。多層表頭統(tǒng)計報表內(nèi)容如表1所示,根據(jù)報表結(jié)構(gòu)化模型描述的報表結(jié)構(gòu)如表2所示。
表1中的標(biāo)題“路線編號”與表體中的第1列直接對應(yīng),是數(shù)據(jù)標(biāo)題,因此其HeadID取值為“01”;該報表表頭部分共有3行,故其Rank取值為3;其沒有相鄰上層標(biāo)題,所以其ParentRank取值為0;要顯示的文本即為HeadText的值“路線編號”;HeadName的取值為其在數(shù)據(jù)庫表中的字段名C_lxbh.
表1中的標(biāo)題“結(jié)構(gòu)形式”與表體中的列不直接對應(yīng),是文本標(biāo)題,它覆蓋了數(shù)據(jù)標(biāo)題“上部”(列序03)和“下部”(列序04)兩列,因此其HeadID取值為“0304”;其位于報表表頭的第2行,故其rank為2;其相鄰上層標(biāo)題位于第一行,故parentrank為1,要顯示的文本即為HeadText的值“結(jié)構(gòu)形式”;文本標(biāo)題沒有數(shù)據(jù)庫表中字段與其對應(yīng),故其HeadName項為空。
3 結(jié)論
本文介紹了復(fù)雜報表的結(jié)構(gòu)化描述,實現(xiàn)了Excel報表的自動生成,該方法對于各種信息系統(tǒng)中復(fù)雜報表的生成具有一定的通用性,極大的縮短了相似功能的開發(fā)周期。
[參考文獻(xiàn)]
[1]吳雷,袁兆山,李超.B/S結(jié)構(gòu)下復(fù)雜報表實現(xiàn)技術(shù)的研究[J].計算機應(yīng)用研究,2006, 23(5):83-85.
[2]程志蓉.智能報表生成系統(tǒng)的研究[J].許昌學(xué)院學(xué)報,2004,23(2):93-95.