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