一種jsp環(huán)境中基于xml的excel報表生成方法
【技術(shù)領(lǐng)域】
[0001]一種JSP環(huán)境中基于XML的EXCEL報表生成方法是基于JSP語言上的一中動態(tài)生成的報表的休現(xiàn),是計算機領(lǐng)域中的應(yīng)用部分。
【背景技術(shù)】
[0002]隨著企業(yè)信息化進程的加速,制造執(zhí)行系統(tǒng)MES (Manufacturing Execut1nSystem)跟企業(yè)資源計劃ERP (Enterprise Resource Planning)得到了越來越廣泛的應(yīng)用。在這些系統(tǒng)的應(yīng)用當中,報表打印功能是其中必不可少的一個功能之一,因為報表作為一種重要的信息載體,在企業(yè)的信息管理、統(tǒng)計分析當中起者不可替代的作用。而在任何一個企業(yè)的應(yīng)用系統(tǒng)中,報表問題也往往是其中一個難點,尤其是在以JSP語言為基礎(chǔ)構(gòu)造的系統(tǒng)體系當中。比如在此次承擔(dān)某鋼廠的信息化項目開發(fā)過程當中,廠方就需要實現(xiàn)這樣一種報表系統(tǒng),具體情況為:
O鋼材的力學(xué)性能原始數(shù)據(jù)位于SQLSERVER 2000數(shù)據(jù)庫當中,在將其中某些數(shù)據(jù)導(dǎo)出時,需要根據(jù)不同的分析統(tǒng)計要求對其中的原始數(shù)據(jù)進行運算,然后將運算后的數(shù)據(jù)生成初始電子數(shù)據(jù)報表,可以用函數(shù)表示為:Yij=F(Xij), Yij為電子報表某單元格的數(shù)據(jù),Xij為SQLSERVER2000數(shù)據(jù)庫中的原始力學(xué)性能數(shù)據(jù),F(xiàn)為映射關(guān)系。
[0003]2)電子報表的數(shù)據(jù)還有可能根據(jù)不同的需要進行二次常規(guī)處理跟信息分析并最終打印報表。
[0004]3)電子表格報表樣式需符合該廠內(nèi)部規(guī)定的報表樣式,能自己進行定義。
[0005]根據(jù)上述要求可知,將數(shù)據(jù)庫中的原始數(shù)據(jù)經(jīng)過計算后生成EXCEL文件是最合適的。這樣就能借助Excel強大、豐富的格式控制和數(shù)據(jù)處理能力,可以滿足用戶自由定義報表樣式和對數(shù)據(jù)進行二次處理的要求。既在一定程度上解決了報表的靈活性問題,又節(jié)省了不少的開發(fā)工作量,縮小了程序設(shè)計的規(guī)模,簡化了程序的維護量,從而大大提高了系統(tǒng)開發(fā)的效率。并且EXCEL作為一種廣泛使用的軟件,也不存在培訓(xùn)問題。在JSP環(huán)境中,一般來說有下面幾種常用的方法可以生成Excel文件。利用SQLSERVER自帶的存儲過程導(dǎo)出生成EXCEL文件。此方法簡單方便但靈活性差,不能事前定義報表格式,如標題區(qū)、表頭區(qū)、表尾區(qū)等等,需要事后再修改、定義其報表樣式,后期處理比較麻煩。且廠方要求生成的報表數(shù)據(jù)是需要經(jīng)過中間處理的,故此方法不能滿足要求。2,利用第三方能生成EXCEL的插件。缺點是插件功能一般有限,不能滿足特殊需要,而且一般要收費,也不能很好的用于B/S結(jié)構(gòu)上,此外還需要額外的時間學(xué)習(xí)了解插件功能。綜合考慮系統(tǒng)的需求并經(jīng)過仔細的研究后我們決定自己開發(fā)用來生成EXCEL文件的程序,因為這樣即經(jīng)濟又方便,在滿足系統(tǒng)要求的前提下是最合適的方法。
【發(fā)明內(nèi)容】
[0006]一種JSP環(huán)境中基XML的一種EXCEL報表生成方法,首先進行EXCEL的XML格式解析;報表一般分解為標題區(qū)、表頭區(qū)、表體區(qū)和表尾區(qū),也可以將報表的內(nèi)容分為兩部分:
(I)靜態(tài)描述部分(標題區(qū)、表頭區(qū)和表尾區(qū)):靜態(tài)描述部分在報表格式定義完后是不變的,如字體的大小,字體是否有下劃線,是單下劃線還是雙下劃線,字體是否有
上標或下標,字體是左對齊、右對齊還是居中等等。
[0007](2)動態(tài)數(shù)據(jù)填充部分(表體區(qū)):這是報表數(shù)據(jù)的呈現(xiàn)部分,是整個報表的核心。
[0008]新建任意一個EXCEL文件,在其中制作完成相應(yīng)格式的報表后,另存為XML文件,這樣
就得到了 EXCEL文件的XML代碼。
[0009]如下面這段xml代碼描述了 EXCEL文件的基本信息,如版本、創(chuàng)建時間、作者、樣式in
息、最后一次保存時間等,為報表的靜態(tài)描述部分。
[0010]〈xml vers1n="l.0">
〈mso-applicat1n progid=〃Excel.Sheet〃>
〈Workbook xmlns=〃urn:schemas-microsoft-com:office: spreadsheet"42Z</Created>
<LastSaved>2007-03-10T02:07:25Z</LastSaved>
<Vers1n>ll.6360</Vers1n>
</DocumentProperties>
〈OfficeDocumentSettings xmlns=〃urn:schemas-microsoft-com:office: office〃>〈RemovePersonalInformat1n/〉
〈/OfficeDocumentSettings>
<ExceIWorkbook xmlns=〃urn:schemas-microsoft-com:office:excel〃><WindowHeight>4530</WindowHeight>
<WindowWidth>8505</WindowWidth>
<WindowTopX>480</WindowTopX>
<WindowTopY>120</WindowTopY>
<AcceptLabelsInFormulas/>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
〈Styles〉
〈Style ss:1D=〃Default〃 ss:Name=〃Normal〃>
〈Alignment ss:Vertical=〃Bottom〃/>
〈Borders/〉
〈Font ss:FontName=〃 宋體〃 x:CharSet=〃134〃 ss: Size=〃12〃/>
〈Inter1r/〉
<NumberFormat/>
〈Protect1n/〉〈/Style〉
〈/Styles〉
而下面的一段XML代碼描述了 sheetl這張工作表的情況,為動態(tài)數(shù)據(jù)描述部分。其中的XML代碼描述了此工作表的行數(shù),列數(shù),單元格的高度及寬度,以及表體區(qū)的表頭信息
和表中數(shù)據(jù)信息等等。
[0011 ] <Worksheet ss:Name=^Sheetl">
〈Table ss:ExpandedColumnCount=〃4〃 ss:ExpandedRowCount=〃3〃X:FulIColumns="I"
x:FullRows=〃l〃 ss:DefaultColumnWidth=〃54〃 ss:DefaultRowHeight=〃14.25〃>
〈Row〉
〈CellXData ss:Type="String"> 第一列 </Data>〈/Cell>
〈CellXData ss:Type="String"> 第二列 </Data>〈/Cell>
〈CellXData ss:Type="String"> 第三列 </Data>〈/Cell>
〈CellXData ss:Type="String"> 第四列 </DataX/Cell>
〈/Row〉
〈Row〉
〈CellXData ss:Type="Number">l〈/Data>〈/Cell>
〈CellXData ss:Type="Number">2〈/Data>〈/Cell>
〈CellXData ss:Type="Number">3〈/Data>〈/Cell>
〈CellXData ss:Type="Number">4〈/Data>〈/Cell>
〈/Row〉
〈Row〉
〈CellXData ss:Type="String">a〈/Data>〈/Cell>
〈CellXData ss:Type="String">b〈/Data>〈/Cell>
〈CellXData ss:Type="String">c〈/Data>〈/Cell>
〈CellXData ss:Type="String">d〈/Data>〈/Cell>
〈/Row〉
〈/Table〉
2.通過對XML結(jié)構(gòu)的分析,當要創(chuàng)建一個這樣的EXCEL報表的時候,就相對容易了。當報表樣式確定以后,靜態(tài)描述部分是固定不變的,因此按照原樣輸出即可,只要根據(jù)需要由程序設(shè)置好相應(yīng)的動態(tài)信息就可以生成XML格式的文件了。比如更改動態(tài)描述部分的未加粗體的〈Row〉......〈/Row〉部分即可變更sheet I表體區(qū)的表頭,更改加粗體部分的
〈Row〉……〈/Row〉和行數(shù)描述信息即可增加/減少、更改表體區(qū)的數(shù)據(jù)信息。下面為一個 XML文件的JSPbean創(chuàng)建程序構(gòu)架: package reportdata; import JSP.10.氺; import JSP.10.FileOutputStream; public class CreateExcel {String str=〃〃;
int sheetlrowcount=8; //sheetl 的總行數(shù)
int sheet2rowcount=5; //sheet2 的總行數(shù)
int sheet3rowcount=4; //sheet3 的總行數(shù)
public CreateExcel () { //構(gòu)造方法}
public String createHead() { //創(chuàng)建頂部靜態(tài)描述信息}
public String createsheetl O { // 創(chuàng)建 sheet I 表}
public String createsheet 2() { // 創(chuàng)建 sheet 2 表}
public String createsheet 3() { // 創(chuàng)建 sheet 3 表}
public String createBottomO { //創(chuàng)建底部靜態(tài)描述信息} }
通過以上的分析,可以分為四步操作:第一步,將所需的原始數(shù)據(jù)從數(shù)據(jù)庫中取出;第二步,對原始數(shù)據(jù)進行處理(用JSP程序?qū)崿F(xiàn)計算過程)并轉(zhuǎn)換為XML信息格式;第三步,利用XML字符流生成XML文件;第四步,轉(zhuǎn)換為正式的EXCEL報表文件。
[0012]在生成XML數(shù)據(jù)文件后,由于其已經(jīng)是一個文件數(shù)據(jù)庫,因此可以進行脫機操作,這樣就減少了網(wǎng)絡(luò)流量,提高了系統(tǒng)效率。
【主權(quán)項】
1.一種JSP環(huán)境中基于XML的EXCEL報表生成方法:該方法主要是通過對的XML格式解析自動生成報表。
2.根據(jù)權(quán)利要求1的JSP環(huán)境中基于XML的EXCEL報表生成方法,其主要特征為:EXCEL的XML格式解析,報表一般分解為標題區(qū)、表頭區(qū)、表體區(qū)和表尾區(qū),也可以將報表的內(nèi)容分為兩部分。
3.根據(jù)權(quán)利要求2的JSP環(huán)境中基于XML的EXCEL報表生成方法,其靜態(tài)描述部分(標題區(qū)、表頭區(qū)和表尾區(qū)):靜態(tài)描述部分在報表格式定義完后是不變的,如字體的大小,字體是否有下劃線,是單下劃線還是雙下劃線,字體是否有上標或下標,字體是左對齊、右對齊還是居中等等。
4.根據(jù)權(quán)利要求2的JSP環(huán)境中基于XML的EXCEL報表生成方法,其動態(tài)數(shù)據(jù)填充部分(表體區(qū)):這是報表數(shù)據(jù)的呈現(xiàn)部分,是整個報表的核心。
5.根據(jù)權(quán)利要求2的JSP環(huán)境中基于XML的EXCEL報表生成方法,根據(jù)其外部的物點,生成特定的XML格式。
6.根據(jù)權(quán)利要求5,其JSPbean創(chuàng)建程序構(gòu)架,生成特定的XML。
7.根據(jù)權(quán)利要求6,將所需的原始數(shù)據(jù)從數(shù)據(jù)庫中取出讀出其數(shù)據(jù)流。
8.根據(jù)權(quán)利要求7,對原始數(shù)據(jù)進行處理(用JSP程序?qū)崿F(xiàn)計算過程)并轉(zhuǎn)換為XML信息格式。
9.根據(jù)權(quán)利要求8,利用XML字符流生成特定的JSP格式的XML文件。
10.根據(jù)權(quán)利要求9,顯示報表格式時轉(zhuǎn)換為正式的EXCEL報表文件。
【專利摘要】一種JSP環(huán)境中基于XML的一種EXCEL報表生成方法:JSP語言環(huán)境下的基于XML的一種EXCEL報表實現(xiàn)方式。這種報表實現(xiàn)方式利用了XML數(shù)據(jù)與格式分離的特點,以及EXCEL強大、豐富的格式控制和數(shù)據(jù)處理能力。利用這一技術(shù)能夠簡化程序設(shè)計,降低開發(fā)難度和開發(fā)成本.與其他EXCEL報表生成方法相比,其靈活性、可控性也大為提高。
【IPC分類】G06F9-44
【公開號】CN104572048
【申請?zhí)枴緾N201310489798
【發(fā)明人】不公告發(fā)明人
【申請人】鎮(zhèn)江鼎拓科技信息有限公司
【公開日】2015年4月29日
【申請日】2013年10月18日