EcelReport使用手冊范本_第1頁
EcelReport使用手冊范本_第2頁
EcelReport使用手冊范本_第3頁
EcelReport使用手冊范本_第4頁
EcelReport使用手冊范本_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1/20ajun版本:2023-11-101.0—ExcelReport2什么是ExcelReport?2它具有那些功能?2ExcelReport:2它與一般報(bào)表工具的區(qū)分:3二體驗(yàn)生成一個(gè)簡潔報(bào)表的制作過程:334三ReportConfig.xml4設(shè)計(jì)一個(gè)報(bào)表需要配置那些信息?5datasource5report6889ExcelReport111415通過$V{}<Excelexcel154.6例如:164.7常見問題:1717為什么需要設(shè)計(jì)報(bào)表嵌入對象?17我們可以在嵌入對象里面做些什么?17一個(gè)嵌入對象實(shí)例:19六使用ExcelReport19擴(kuò)大你自己的數(shù)據(jù)源。19使用變量別名。20設(shè)計(jì)模板是使用$V{excel20web容器中配置ExcelReport〔ExcelReportServlet20在非web容器環(huán)境下使用excelreport.20七一個(gè)完整的報(bào)表例如:20配置reportConfig.xml202020完畢語:20—ExcelReport什么是ExcelReport?ExcelReport是一款基于Excel據(jù)源,并配置相應(yīng)的配置文件,就可以通過頁面對指定Servlet懇求輸出報(bào)表,其生成的報(bào)表是一個(gè)excel文件。通過模板文件的方式來生成Excel文件,可以讓程序員從生成特定格式的Excel文件的輸出格式把握以及Excel文件讀寫等紛繁簡潔而又簡潔出錯(cuò)的細(xì)節(jié)中解放出Excel文件,如何去把握最終的文件輸出效果等細(xì)節(jié),從而大大減輕了制作一個(gè)Excel報(bào)表的工作量,并增加了程序的可維護(hù)性,由于很多的報(bào)表的修改只需通過模板文件的修改就可以實(shí)現(xiàn),而無需改動(dòng)程序。同時(shí)該報(bào)表工具又供給一些靈敏的特性來使得用戶可以自由把握報(bào)表的輸出過程。它具有那些功能?卡片式報(bào)表的支持。列表式報(bào)表的支持。主從式報(bào)表的支持??梢郧短滓粋€(gè)分組從而實(shí)現(xiàn)對主記錄或從記錄進(jìn)展分組的功能,反之也如此。格式化的數(shù)據(jù)輸出,該報(bào)表工具支持全部Excel的格式化輸出把握。支持全部ExcelExcelReport數(shù)據(jù)源的自定義:用戶可以自己定義數(shù)據(jù)源以替代默認(rèn)實(shí)現(xiàn),例如,我們可以編寫一個(gè)自己的數(shù)據(jù)庫數(shù)據(jù)源,通過定義該數(shù)據(jù)源我們可以利用現(xiàn)有系統(tǒng)的數(shù)據(jù)庫連接及數(shù)據(jù)檢索框架等。嵌入報(bào)表數(shù)據(jù)處理類:用戶可以嵌入自己報(bào)表數(shù)據(jù)處理類〔通過配置文件配置,通過嵌入用戶自己的報(bào)表數(shù)據(jù)處理類,報(bào)表工具給用戶供給了一個(gè)入口讓用戶參與報(bào)表的生成過程生成報(bào)表前來組合自己的數(shù)據(jù)源,在這里用戶完全可以充分利用現(xiàn)有系統(tǒng)的相關(guān)業(yè)務(wù)類來生成自己的數(shù)據(jù)源。插入查詢監(jiān)聽器:用戶可以插入自己的查詢監(jiān)聽器,通過監(jiān)聽數(shù)據(jù)源的查詢懇求來做相關(guān)數(shù)據(jù)的檢索及處理等工作〔該功能在主從報(bào)表中尤其有用。插入字段監(jiān)聽器:通過插入字段監(jiān)聽器,使得用戶可以參與報(bào)表的輸出過程,把握報(bào)表的具體輸出的數(shù)據(jù)。〔對于數(shù)據(jù)庫自動(dòng)檢索數(shù)據(jù)類數(shù)據(jù)源的應(yīng)用場合尤其有用這些特性在后面的章節(jié)我們會做具體的介紹。1.4ExcelReport是一個(gè)完全基于excel的報(bào)表工具,其最大的特點(diǎn)是完全依靠于excel是其于其他任何報(bào)表工具的最大區(qū)分。通過依靠于Excel它具備了以下優(yōu)點(diǎn):ExcelExcel大功能可以賽過任何其他報(bào)表工具模板定義工具。Excel的強(qiáng)大功能,如Excel函數(shù)庫及其相關(guān)的腳本技術(shù),Excel的圖表<暫未供給支持>以及其對打印功能的強(qiáng)大把握力氣。計(jì)算機(jī)世界里面大多數(shù)語言類的教程,在起始局部都會有一個(gè)經(jīng)典的HelloWorld作為整個(gè)書的開篇,固然這樣一個(gè)用例放在全文的開頭,一來可以使讀者可以快速的感受下所學(xué)東西的功能,二來也可以讓讀者快速上手,通過成功運(yùn)行一個(gè)簡潔例子,而獲得確定的成就感,從而增加連續(xù)學(xué)習(xí)下去的信念。在這里我們也不想免俗,讓大家感受一下,制作一個(gè)Excel固然在開頭這個(gè)簡潔例子之前,一些必要的環(huán)境必需得提前預(yù)備好。<注:你可以在example/tomcat5.0tomcat5.0web貝到本地的tomcat本手冊只針對ExcelReport的功能及其使用方法進(jìn)展介紹,并未涉及報(bào)表制作相關(guān)的學(xué)問說明,因此在閱讀此文檔前必需要求讀者具備確定報(bào)表制作相關(guān)的根底學(xué)問,且具備確定報(bào)表制作的閱歷,并了解一般報(bào)表設(shè)計(jì)的一般流程。運(yùn)行環(huán)境配置首先你得預(yù)備一個(gè)WEB效勞器〔推舉用Tomcat5.0,拷貝example\tomcat5.0\名目下的excelreport.xml文件到你的TOMCAT_HOME\conf\Catalina\localhostexample\tomcat5.0\excelreportTOMCAT_HOME\webapps啟動(dòng)數(shù)據(jù)庫――找到TOMCAT_HOME\webapps\excelreport\dababase\server.bat,雙擊該文件啟動(dòng)HSQLWindows拷貝excelreport對應(yīng)的運(yùn)行庫文件到名目:TOMCAT_HOME\webapps\excelreport\WEB-INF\lib拷貝TOMCAT_HOME\webapps\excelreport\dababase\hsqldb.jarTOMCAT_HOME\common\lib截止到目前,運(yùn)行環(huán)境已經(jīng)搭建完成。開頭制作一個(gè)簡潔的報(bào)表ReportConfig.xml在我們exampleuser的表。在配置文件中參與下面配置信息:<datasourcename=“helloworld_ds“type=“database“><sqlvalue=“select*fromuser“/></datasource><reportname=“helloworld“templetfile=“helloworld.xls“><sheetname=“helloworld“index=“0“reportstyle=“l(fā)ist“><datasourcename=“ds“source=“helloworld_ds“></datasource></sheet></report>配 置 helloworld.xls 模 板 文 件如圖紅線圈住地方配置你的數(shù)據(jù)集字段要輸出的位置。初接觸配置文件會比較麻煩,由于配置的信息比較多,在后續(xù)的章節(jié)我們會具體介紹具體每個(gè)配置信息的具體功能。為了避開消滅不必要的錯(cuò)誤,你最好從例子附帶的模板文件拷貝配置信息。這樣可以削減不必要的失誤帶來的麻煩。tomcat懇求報(bào)表:localhost:8080/excelreport/report?report=helloworld具體信息可以依據(jù)你web假設(shè)能看到文件下載對話框,那么恭喜你,第一個(gè)例子程序運(yùn)行成功了。三ReportConfig.xml在上一章節(jié)我們來快速地體驗(yàn)了一下ExcelReport當(dāng)中信任你也應(yīng)當(dāng)能體驗(yàn)到ExcelReport使得程序員可以不用關(guān)心報(bào)表的具體如何生成,而只要預(yù)備自己的數(shù)據(jù)源和模板文件,僅此護(hù)性。我們可以很便利地通過更改模板文件來更改報(bào)表的具體輸出效果,而這一過程可以做到盡可能小的影響到數(shù)據(jù)源的相關(guān)業(yè)務(wù)規(guī)律。你再也看不到業(yè)務(wù)數(shù)據(jù)相關(guān)的代碼和excelExcel輸出4/2010/20格式把握的代碼了。我們在上一章節(jié)HelloWorldReport例子里面其中很關(guān)鍵得一步就是配置一個(gè)ReportConfig.xml我們配置了datasourcereport息的具體功能和配置項(xiàng)的具體使用方法。設(shè)計(jì)一個(gè)報(bào)表需要配置那些信息?信任每一個(gè)剛接觸到這個(gè)工具的人頭腦里面都會問的一個(gè)問題,固然這要看,不同的報(bào)表有不同的實(shí)現(xiàn)〔廢話:,但不管什么報(bào)表有兩個(gè)配置工程是必不行少的,datasource和report。其中detasource是用來描述一個(gè)數(shù)據(jù)源的信息,由它來告知報(bào)表工具如何去生成一個(gè)具體的數(shù)據(jù)源對象實(shí)例,我們在這個(gè)配置項(xiàng)你們需要答復(fù)報(bào)表工具以下幾個(gè)問題:我需要一個(gè)什么類型的數(shù)據(jù)源?這個(gè)數(shù)據(jù)源如何取數(shù)據(jù)〔取決于1。數(shù)據(jù)源應(yīng)當(dāng)接收那些輸入?yún)?shù)?〔可選數(shù)據(jù)源有那些字段?字段的類型是什么等等5.假設(shè)是database型的數(shù)據(jù)源的話,查詢的sqlReport是用來告知報(bào)表生成工具,生成一個(gè)報(bào)表需要用到那些資源?從那去?。勘确剑簣?bào)表模板文件名稱,報(bào)表中用到的數(shù)據(jù)源名稱等等信息。報(bào)表生成工具通過這些配置信息,去取得相應(yīng)的資源,并生成用戶想要的報(bào)表文件。datasource節(jié)點(diǎn)上面我們說過datasource是用來描述一個(gè)數(shù)據(jù)源,該節(jié)點(diǎn)定義一個(gè)全局的數(shù)據(jù)源信息,當(dāng)定義好一個(gè)全局的數(shù)據(jù)源之后,就可以在我們具體的報(bào)表里面應(yīng)用該數(shù)據(jù)源。在具體介紹該節(jié)點(diǎn)配置信息之前,我們看一個(gè)比較典型的實(shí)例,參照該實(shí)例來具體介紹一個(gè)數(shù)據(jù)源的配置信息需要使用到那些配置工程,他們具體的意思是什么?下面是一個(gè)數(shù)據(jù)源的配置信息實(shí)例:<datasourcename=“partsSource“type=“database“><sqlvalue=“SELECT*FROMTAS_SVW_PARTSWHEREVSVWPARTSID>=”arg1”andVSVWPARTSID<=”arg2”“/><fieldname=“VPARTSCODE“type=“java.lang.Long“/><fieldname=“date“type=“java.util.Date“/><fieldname=“number“type=“java.lang.Long“/><parametername=“arg1“/><parametername=“arg2“/></datasource>Datasource,name和typeName:用來標(biāo)識當(dāng)前定義的datasourceTypedatabasestatic〔留意區(qū)分大小寫,前者〔type=“database“表示當(dāng)前數(shù)據(jù)源是數(shù)據(jù)庫自動(dòng)檢索類型的數(shù)據(jù)源〔該類數(shù)據(jù)源用戶只需配置sql語句和參數(shù),數(shù)據(jù)源會自動(dòng)從數(shù)據(jù)庫檢索數(shù)據(jù);后者〔type=“static“表示當(dāng)前數(shù)據(jù)源是一個(gè)靜態(tài)的數(shù)據(jù)源,〔該類數(shù)據(jù)源數(shù)據(jù)需要使用者在代碼里面手動(dòng)填入Sql子節(jié)點(diǎn):該節(jié)點(diǎn)只有在type=“database“類型的數(shù)據(jù)源中配置有效,Valuesqlsql果填到數(shù)據(jù)源記錄集中。Fielde類型,這樣報(bào)表工具會自動(dòng)將該字符串轉(zhuǎn)化成日期型并寫入到excel可以在生成的excel文件中看到格式化的日期輸出效果了excel的模板文件中配置該模板字段的格式化日期輸出格式Name:字段名稱,表示當(dāng)前配置數(shù)據(jù)源中的那個(gè)字段。Type:字段對應(yīng)的數(shù)據(jù)類型,它主要有以下幾種類型:類型 說明對應(yīng)于java中的Integer對應(yīng)于java中的Byte對應(yīng)于java中的Double對應(yīng)于java中的Float對應(yīng)于java中的Long對應(yīng)于java中的Short對應(yīng)于java中的String對應(yīng)于java中的Boolean對應(yīng)于java中的Date

ExcelNumber字符型日期型Parameter該節(jié)點(diǎn)用來配置數(shù)據(jù)源輸入?yún)?shù),一個(gè)數(shù)據(jù)源當(dāng)需要檢索數(shù)據(jù)時(shí)它可能需要一些輸入?yún)atabase類型的數(shù)據(jù)源中我們sql語句可能需要相應(yīng)的檢索條件,該檢索條件的值就可以通過定義數(shù)據(jù)源參數(shù)的形式來與相應(yīng)的sql語句關(guān)聯(lián)起來。固然該參數(shù)也可以運(yùn)用在static類型的數(shù)據(jù)源中。Name:參數(shù)名稱[Type]:表示參數(shù)的類型,可以參考field子節(jié)點(diǎn)的typereport在第一節(jié)中我們曾提到過一個(gè)report節(jié)點(diǎn)是用來配置一個(gè)報(bào)表相關(guān)的資源信息,該節(jié)點(diǎn)是報(bào)表配置信息中格外關(guān)鍵的一步,同樣在我們介紹該節(jié)點(diǎn)配置信息之前我們先看一個(gè)比較典型的配置例:<reportname=“groupDemo“templetfile=“testGroup.xls“><embeddedObjectname=“obj1“class=“other.GroupDemo“/><sheetname=“Sheet1“index=“0“reportstyle=“l(fā)ist“><datasourcename=“groupDs“source=“partsSource“/><groupname=“group“groupby=“province“dataSource=“groupDs“/><groupname=“groupProduct“groupby=“sub2“dataSource=“groupDs“/></sheet></report>ReportNamreport表名稱。Templetfil模板文件都會去該名目下讀取EmbeddedObject該節(jié)點(diǎn)定義當(dāng)前報(bào)表的入口處理類,該類是在生成報(bào)表初期,報(bào)表工具會調(diào)用該節(jié)點(diǎn)配置的嵌入類信息,并生成相應(yīng)對象實(shí)例,同時(shí)調(diào)用該對象的execute函數(shù)來只需一Struts的朋友都知道使用strutsName:標(biāo)識當(dāng)前嵌入對象實(shí)例名稱。Class:標(biāo)識嵌入對象類全名,該名稱是一個(gè)包含包路徑信息的完整類名描述。留意:embeddedObjectSheetSheet子節(jié)點(diǎn)用來配置一個(gè)excelsheet對應(yīng)的報(bào)表信息。留意excelreport報(bào)表生成工具是依照excel文件<report>可以看成是由多個(gè)sheet只報(bào)表頁面組成的一個(gè)報(bào)表集合。其中每個(gè)sheetName:該屬性用于指定輸出報(bào)表文件的sheet名稱,固然該名稱必需與對應(yīng)模板文件中的sheetindex:該屬性原來是打算用于name屬性的一個(gè)補(bǔ)充,但目前還沒啟用,可以不配置。reportstyle:指定當(dāng)前sheet頁對應(yīng)的報(bào)表風(fēng)格??梢灾付ǖ牧斜盹L(fēng)格有以下幾種:cardlist

風(fēng)格名稱

說明標(biāo)識當(dāng)前輸出報(bào)表是一個(gè)卡片風(fēng)格的報(bào)表,卡片風(fēng)格的報(bào)表就是整個(gè)報(bào)表輸出結(jié)果類似于一卡片,其中只有一些固定工程的容需填充在卡片報(bào)表的具體位置,且結(jié)果集都只能還不愿定只有一條記錄數(shù)據(jù),該處還有待連續(xù)完善種風(fēng)格,該風(fēng)格的報(bào)表,報(bào)表的數(shù)據(jù)行數(shù)是依據(jù)結(jié)果集的記錄數(shù),并依據(jù)不同的模板定義,產(chǎn)生處不同的縱向行擴(kuò)展的報(bào)表輸出效cross〔暫未實(shí)現(xiàn)datasource

的報(bào)表,其列和行的數(shù)據(jù)都是依據(jù)數(shù)據(jù)集來動(dòng)態(tài)生成,并且協(xié)作確定的統(tǒng)計(jì)計(jì)算,可以生成一些格外簡潔的報(bào)表。該節(jié)點(diǎn)用來配置當(dāng)前sheet報(bào)表中使用的數(shù)據(jù)源實(shí)例,它與上節(jié)datasource配置信息關(guān)系類似于類與對象的關(guān)系datasource節(jié)點(diǎn)則定義了該數(shù)據(jù)源的一個(gè)具體實(shí)例。全局的數(shù)據(jù)源是可以給全部報(bào)表公用的,但數(shù)據(jù)源實(shí)例只存在于當(dāng)前報(bào)表中。name:數(shù)據(jù)源實(shí)例名稱;在報(bào)表模板中假設(shè)需要使用數(shù)據(jù)源,則通過該名稱來引用。source:當(dāng)前數(shù)據(jù)源實(shí)例引用的數(shù)據(jù)源。指定一個(gè)數(shù)據(jù)源名稱,該名稱在一個(gè)datasourcedatasource注:在一個(gè)sheet報(bào)表中,可以定義多個(gè)datasourcegroup一個(gè)goup報(bào)表輸出一個(gè)分組效果的報(bào)表。name:分組名稱,在模板文件中定義一個(gè)分組時(shí)需要使用該名稱來引用一個(gè)分組。groupby:定義分組字段,假設(shè)有多個(gè)字段則各字段間用逗號〔,分割。dataSource:應(yīng)用的datasourcedatashouce注:在使用group分組功能時(shí),首先必需保證結(jié)果集中的數(shù)據(jù)集已經(jīng)依據(jù)分組組把握,但對數(shù)據(jù)源的數(shù)據(jù)本身不會進(jìn)展分組。比方,在一條分組數(shù)據(jù)中,假設(shè)要產(chǎn)生正確的分組效果,數(shù)據(jù)源對應(yīng)的sqlorderby先對數(shù)據(jù)進(jìn)展分組,這樣就可以保證產(chǎn)生的數(shù)據(jù)已經(jīng)依據(jù)需要分組的要求挨次排列在數(shù)據(jù)源中。group配置文件配置信息規(guī)建議在我們制作一個(gè)報(bào)表的過程當(dāng)中,其中很關(guān)鍵的一步就是配置報(bào)表的模板文件,通過前面的介紹我們知道,一個(gè)報(bào)表模板文件它打算了整個(gè)報(bào)表的輸出格式,數(shù)據(jù)的顯示方式,以及數(shù)據(jù)的格式化輸出把握等信息,可以這么說,你的報(bào)表做的好不好看,符不符合用戶的要求全在它了。在我們具體介紹ExcelReport表所要接觸到的一些根本的概念。固然這些根本的概念/規(guī)章同樣適用于其它的報(bào)表工具。假設(shè)你之前有過報(bào)表制作經(jīng)受的話,信任這些概念對你來說都不生疏。我們知道任何報(bào)表工具其最終都是由一些標(biāo)題、字段項(xiàng)描述和具體數(shù)據(jù)等根本元素構(gòu)查詢條件查詢符合特定條件的數(shù)據(jù);也有一些統(tǒng)計(jì)類的數(shù)據(jù)元素,這類數(shù)據(jù)我們一般是通過確定的計(jì)算規(guī)章計(jì)算取得;固然除此之外還有一些如表頭〔整個(gè)報(bào)表的開頭局部,表尾〔整個(gè)報(bào)表的結(jié)尾局部,頁頭〔每個(gè)頁的開頭局部頁尾〔每個(gè)頁的結(jié)尾局部,組頭組尾,數(shù)據(jù)區(qū)〔bandband尾等這樣一些在全部報(bào)表制作過程當(dāng)中比較常用到的概念,接下來我們就來具體介紹一下這些在報(bào)表制作過程當(dāng)中可能會用到的一些根本元素及其各拘束報(bào)表模板文件中所代表的意思:表頭:整個(gè)報(bào)表的開頭局部〔或叫區(qū)域,下同。表尾:整個(gè)報(bào)表的完畢局部。頁頭:每個(gè)分頁的開頭局部。頁尾:每個(gè)分頁的結(jié)尾局部。組頭:每個(gè)數(shù)據(jù)分組的開頭局部4.2我們會具體介紹組數(shù)據(jù)區(qū):每個(gè)組數(shù)據(jù)輸出局部。組尾:每個(gè)數(shù)據(jù)分組的結(jié)尾局部。band:每個(gè)bandband4.2band:每個(gè)bandband:每個(gè)band在上述報(bào)表的根本元素中,組和band是兩個(gè)比較特別,也格外常用的元素。由于他們本身比較靈敏,因此你需要在你的報(bào)表設(shè)計(jì)過程當(dāng)中需留神慎重地使用它們,通過一些奇異的模板定義你也可以構(gòu)建出一些特別效果的報(bào)表。固然不同的報(bào)表工具可能對這些概念的命名和具體規(guī)定的細(xì)則不定一樣,但其根本的原理還是全都的。接下來的一節(jié)我們會具體介紹應(yīng)當(dāng)如何將這樣一些根本的報(bào)表元素放在一個(gè) ExcelReport報(bào)表模板中去。報(bào)表模板中的根本元素在本章的開頭局部我們大致了解了在制作一個(gè)報(bào)表的過程當(dāng)中,可能會使用到的一些根本的概念,接下來的這一節(jié)我們會具體介紹這些根本元素應(yīng)當(dāng)如何應(yīng)用到我們的ExcelReport下面我們列出一個(gè)表格,該表格具體說明白ExcelReport當(dāng)中用到的根本報(bào)表元素:根本元素表頭表尾頁頭組頭

ExcelReport任何band或組定義的開頭之前的區(qū)域任何band或組定義完畢之后的區(qū)域無無$G{property=head}定義 行 -$G{property=body義行之間的區(qū)域

具體說明ExcelReport簡化,因此沒有去設(shè)定特地定義表頭開頭區(qū)域的模板定義元素,而是將全部band或組定義之前的全部區(qū)域都自動(dòng)認(rèn)為是報(bào)表的表頭局部。同上excelexcelExcelReport過設(shè)定$G{開頭,并以}結(jié)尾的單元格來標(biāo)識一個(gè)組模板定義信息。組模板定義有幾個(gè)屬性值必需指定:Name:標(biāo)識當(dāng)前組名稱Property:標(biāo)識當(dāng)前組定義區(qū)域,有四個(gè)可組數(shù)據(jù)區(qū)組尾bandbandband

$G{property=body}到$G{property=foot}之間的區(qū)域$G{property=foot}到$G{property=end}之間的區(qū)域$B{property=head}到$B{property=body}定義行之間的區(qū)域$B{property=body}到$B{property=foot}之間的區(qū)域$B{property=foot}到$B{property=end}之間的區(qū)域

選值〔head-組頭,body-組數(shù)據(jù)區(qū),foot-組結(jié)尾,end-組定義完畢注:該屬性值是有順序的,模板的定義必須是head->body->foot->end否則系統(tǒng)會仍出無效的模板定義的特別信息出來dataSource:定義當(dāng)前分組的數(shù)據(jù)源。同上同上類似于分組定義,聲明一個(gè)band通過設(shè)定$B{開頭,并以}結(jié)尾的單元格來標(biāo)識一個(gè)bandBand的模板定義同樣也有幾個(gè)屬性值必需指定:Name:標(biāo)識當(dāng)前band名稱Property:標(biāo)識當(dāng)前band定義區(qū)域,有四個(gè)可選值〔head-band頭,body-band數(shù)據(jù)區(qū),foot-band結(jié)尾,end-band數(shù)據(jù)區(qū)定義完畢。注:該屬性值是有挨次的,模板的定義必需是以head->body->foot->end的挨次來定義,否則系統(tǒng)解析模板時(shí)會拋出無效的模板定義的特別dataSource:定義當(dāng)前band對應(yīng)的數(shù)據(jù)源同上同上ExcelReportExcelReport$P{parameterName}參數(shù)變量模板元素$F{datasourceName.fieldName}字段變量模板元素

說明該語法用來定義一個(gè)參數(shù)變量模板元素。一個(gè)參數(shù)變量模板元素,表示當(dāng)前模板定義所在的單元格的容在生成報(bào)表過程中,報(bào)表生成工具會取參數(shù)變量模板元素定義的參數(shù)值來替代parameterName指定該語法用來定義一個(gè)字段變量模板元素。字段變量模板元素表示:該模板的實(shí)際值是依據(jù)運(yùn)行期數(shù)據(jù)源〔datasourceName指$V{varibleName}變量模板元素$S{}$R{}

定引用的數(shù)據(jù)源中的實(shí)際字段〔fieldName指定數(shù)據(jù)源中的字段名稱值。報(bào)表工具在實(shí)際生成報(bào)表過程當(dāng)中,會在字段變量模板位置的單元格寫入該數(shù)據(jù)源實(shí)例對象對應(yīng)字段的實(shí)際值。該語法有兩層含義,用于不用的地方。用來在報(bào)表中使用Excel$V{ExcelFunction<..>}形式來聲明一個(gè)模板元素,該元素在生成報(bào)表時(shí)會輸出用戶配置的Excel函數(shù)。<4.5>用來引用另外一個(gè)變量。用來定義在模板對應(yīng)位置輸出一個(gè)字符串,在該模板變量里面可以嵌入其它模板元素如<$F{},$P{},$V{}$S{Hello:$F{ds.userName}}假設(shè)$F{ds.userName}當(dāng)前值為”excelReport”:該模板運(yùn)行后的輸出效果:Hello:excelReport$V{}模板元素時(shí),當(dāng)該元素應(yīng)用或使用其他字段值或變量,必需要求該變量在定一個(gè)變量的值時(shí),該變量必需已經(jīng)定義/存在。ExcelReport在上面一節(jié)我們了解了在一個(gè)報(bào)表模板文件中可能會用到的模板元素,接下來我們從整個(gè)報(bào)表模板文件的整體布局來介紹,那些局部該放那些模板元素,應(yīng)當(dāng)放什么樣的模板元素因此在下面的介紹中我們通過不同的報(bào)表的類型來分別介紹。卡片式報(bào)表有什么表頭,表尾的概念,由于它整個(gè)報(bào)表就一靜態(tài)的卡片,在這個(gè)卡片區(qū)域我們可以放入:<$P{},$F{},$V{}>這樣一些模板元素。之所以定義卡片風(fēng)格的報(bào)表,是由于該類型的報(bào)表要比列表式報(bào)表生成的速度更快,由于它模板定義和解析都格外簡潔留意的是,在卡片式風(fēng)格的報(bào)表中不能定義$B{}或$G{}這樣的模板配置元素,由于該類風(fēng)格的報(bào)表在模板分析時(shí)會無視該信息列表式風(fēng)格報(bào)表列表式風(fēng)格的報(bào)表是我們尋常應(yīng)用最多的一種類型的報(bào)表,在該類報(bào)表的模板配置文件中一般可以由以下幾個(gè)區(qū)域組成:表頭區(qū),表尾區(qū),表數(shù)據(jù)區(qū),band數(shù)據(jù)區(qū),組數(shù)據(jù)區(qū)。整個(gè)報(bào)表模板文件分區(qū):區(qū)〔band4.1下面來具體介紹每個(gè)區(qū)域的劃分規(guī)章和作用。4.11區(qū)域邊界定義:在任何一個(gè)$B{}模板元素定義前的那局部區(qū)域。$P{},$F{},$V{}區(qū)域輸出規(guī)章:這局部區(qū)域在整個(gè)報(bào)表生成過程中都只輸出一次。且放在整個(gè)生成報(bào)表文件的最開頭局部。報(bào)表數(shù)據(jù)區(qū)〔band4.12區(qū)域邊界定義:在模板文件第一個(gè)消滅$B{}模板定義元素的位置作為開頭行,到最終一個(gè)$B{}模板定義元素的位置作為完畢行,在開頭和完畢行之間的這段區(qū)域都作為報(bào)表數(shù)據(jù)區(qū)??捎媚0宥x元素:$B{}區(qū)域輸出規(guī)章:這局部區(qū)域取決于$B{}〔band數(shù)據(jù)區(qū)的相應(yīng)輸出規(guī)章。4.13邊界:最終一個(gè)$B{}定義完畢位置,到整個(gè)模板文件的結(jié)尾局部??捎媚0宥x元素:$P{},$F{},$V{}生成報(bào)表文件的結(jié)尾局部。bandband$B{name=band1;property=head;dataSource=ds}$B{name=band1;property=body}$B{name=band1;property=foot}$B{name=band1;property=end}任何一個(gè)band的定義都必需由上述幾局部模板單元組成,其中:name:標(biāo)識當(dāng)前bandband否正確完畢〔通過查找head->body->foot->end。property:標(biāo)識當(dāng)前模板元素是屬于當(dāng)前band的那局部。該屬性有四個(gè)值可head,body,foot,end,且必需遵循從上到下head->body->foot->end。否則系統(tǒng)會認(rèn)為當(dāng)前組的模板定義不合法。datasource:定義當(dāng)前band引用的數(shù)據(jù)源,該數(shù)據(jù)源需要在報(bào)表配置文件〔ReportConfig.xml具體說明:band數(shù)據(jù)區(qū)也分為三個(gè)區(qū)域,這三個(gè)區(qū)域由四個(gè)標(biāo)記屬性來描述,它們分別是:〔property=head,property=body,property=foot,property=end,由這四個(gè)屬性值來表示band,band,band4.2band4.21區(qū)域邊界定義:同一個(gè)band〔依據(jù)band的name屬性來區(qū)分的property=head到property=bodyband4.21可用模板定義元素:$B{},$P{},$F{},$V{}。也就是說在band的頭部可以嵌入band,組,以及其他的模板定義元素。區(qū)域輸出規(guī)章:band數(shù)據(jù)區(qū)頭對應(yīng)的區(qū)域在每次輸出該bandband4.22區(qū)域邊界定義:同一個(gè)band〔依據(jù)band的name屬性來區(qū)分的property=body到property=footband4.22可用模板定義元素:$B{},$G{},$P{},$F{},$V{}。區(qū)域輸出規(guī)章:bandbanddatasource源實(shí)例記錄集條數(shù)來打算的。該數(shù)據(jù)源有多少條記錄,該區(qū)域就會被重復(fù)輸出多少次。band4.23區(qū)域邊界定義:同一個(gè)band〔依據(jù)band的name屬性來區(qū)分的property=foot到property=end元素定義之間的區(qū)域?yàn)楫?dāng)前band4.23可用模板定義元素:$B{},$P{},$F{},$V{}。區(qū)域輸出規(guī)章:每輸出一個(gè)band,在其band結(jié)尾局部都會輸出band區(qū)域。band數(shù)據(jù)區(qū)的功能實(shí)際上就是將依據(jù)band數(shù)據(jù)區(qū)模板定義的輸出格式將band對應(yīng)數(shù)據(jù)源的全部記錄輸出到報(bào)表的指定位置。組數(shù)據(jù)區(qū):組數(shù)據(jù)區(qū)模板定義規(guī)章:$G{name=group;property=head;dataSource=groupDs}$G{name=group;property=body}$G{name=group;property=foot}$G{name=group;property=end}任何一個(gè)分組的定義都必需由上述幾局部模板單元組成,其中:nam留意該名稱必需同〔ReportConfig.xmlgoup3.3property:標(biāo)識當(dāng)前模板元素是屬于相應(yīng)組的那局部。該屬性有四個(gè)值可供選擇〔head,body,foot,end,各屬性值之間且必須遵循從上到下head->body->foot->end義特別信息。datasource:定義當(dāng)前分組引用的數(shù)據(jù)源,該數(shù)據(jù)源需要在報(bào)表配置文件〔ReportConfig.xml組數(shù)據(jù)區(qū)也可分為三個(gè)區(qū)域,各區(qū)域的劃分也是通過property屬性來描述,它們分別是property=head,property=body,property=foot,property=end,由這四個(gè)屬性值來表示組頭,組數(shù)據(jù)區(qū),組尾。如以以下圖:4.34.31區(qū)域邊界定義:同一個(gè)組〔依據(jù)組模板定義的name屬性來區(qū)分的property=head到property=body4.31區(qū)域>可用模板定義元素:$B{},$P{},$F{},$V{}。依據(jù)該規(guī)章我們可以知道,在組的頭部可以嵌入band以及其他的模板定義元素。區(qū)域輸出規(guī)章:組頭對應(yīng)的區(qū)域在每次生成該分組報(bào)表數(shù)據(jù)時(shí)都會被輸出一次。4.32區(qū)域邊界定義:同一個(gè)組〔依據(jù)分組的name屬性來區(qū)分的property=body到property=foot4.32可用模板定義元素:$B{},$G{},$P{},$F{},$V{}。依據(jù)該規(guī)章我們可以知道,在一個(gè)組的數(shù)據(jù)區(qū)還可嵌套其它的組或band。區(qū)域輸出規(guī)章:組數(shù)據(jù)區(qū)的輸出是依據(jù)組模板對應(yīng)的數(shù)據(jù)源實(shí)例記錄集的分組狀況來決被重復(fù)輸出多少次。4.33區(qū)域邊界定義:name屬性來區(qū)分的property=foot到property=end4.23可用模板定義元素:$B{},$G{},$P{},$F{},$V{}。區(qū)域輸出規(guī)章:每輸出一個(gè)組,在其分組報(bào)表結(jié)尾局部都會輸出組尾對應(yīng)的區(qū)域。注:可用模板定義元素指的是在當(dāng)前區(qū)域可以定義的模板變量。報(bào)表模板配置規(guī)建議定義模板元素$B{},$G{}時(shí)盡量將整個(gè)行都合并,并將合并后的單元格設(shè)置一個(gè)背風(fēng)光,如4.2圖所示。這樣使得整個(gè)模板定義文件分區(qū)清楚,便于維護(hù)和修改。由于$B{},$G{}模板元素對應(yīng)的整個(gè)行在報(bào)表輸出過程中都會被無視掉,它只是在模板分析過程中才有效。因此,當(dāng)我們在$B{},$G{}行定義任何信息都不會消滅在最終生成的報(bào)表文件當(dāng)中板文件制作的過程中尤其需要留意。band可讀型。在定義ExcelExcelexcel結(jié)果,等計(jì)算結(jié)果正確后我們才將該函數(shù)放到$V{}模板中,并用相應(yīng)的字段變量替換原有的單元格,這樣可以大大削減我們定義模板出錯(cuò)的可能。band和分組的命名盡量簡短并有意義,固然好處自然不用說了,這跟我們在編程過程中取個(gè)好的變量/函數(shù)名是同樣的道理。格式化輸出把握在一個(gè)報(bào)表工具中,格式化輸出是格外重要的一項(xiàng)功能,它能使用戶能靈敏的把握數(shù)據(jù)ExcelReport出,這里需要說明的是,在我們這個(gè)報(bào)表工具中格式化輸出最終是通過Excel話說,在Excel報(bào)表文件的生成過程中,工具本身并不格式化數(shù)據(jù),而是將模板定義的格式Excel中顯示時(shí)會被Excel格式化輸出并顯示。因此在ExcelReportExcel下面我們來介紹一些如何設(shè)置一個(gè)格式化輸出的字段。當(dāng)我們在制作一個(gè)報(bào)表過程當(dāng)中,需要把握一個(gè)模板變量<$V{},$F{}>的格式化輸出時(shí),我們首先需要設(shè)置該模板變量所在單元格的格式信息〔通過Excel設(shè)置單元格格式來設(shè)定,$V{}和大局部$F{}的模板定義已經(jīng)足夠了,我們就應(yīng)當(dāng)可以看到生成的報(bào)表已經(jīng)依據(jù)我們想要的效果進(jìn)展了格式化輸出。但對于某些較特別的值我們還需進(jìn)一步處理:對于$F{}模板定義的單元格,我們還需要進(jìn)一步推斷該模板變量對應(yīng)的字段值是否與你需要格式化把握的類型全都,比方,假設(shè)我們需要格式化輸出一個(gè)日期型字段,那么我們確定要確保該字段在數(shù)據(jù)源中必需以DateData據(jù)源中呢?比方在某些表中日期被檢索出來可能就是一個(gè)字符串。對于這種狀況,假設(shè)你不對數(shù)據(jù)源進(jìn)一步處理,你是無法在生成的報(bào)表中看到格式化的輸出效果的。對于進(jìn)一步如何對該字段進(jìn)展處理?在ExcelReport第一我們可以在數(shù)據(jù)源定義時(shí)指定某個(gè)字段的類型,這樣報(bào)表工具會自動(dòng)將數(shù)據(jù)源中的值轉(zhuǎn)換用戶定義的類型〔這種狀況在數(shù)據(jù)庫類型數(shù)據(jù)源中較常用。其次我們可以在數(shù)據(jù)源中對該字段插入一個(gè)字段監(jiān)聽器,這樣在報(bào)表工具讀取該字段值時(shí)可以自己去手動(dòng)將該值轉(zhuǎn)換成Date類型并返回轉(zhuǎn)換后的值,這樣報(bào)表工具就會用我們型轉(zhuǎn)換的狀況下較常用通過$V{}<Excelexcel在報(bào)表制作過程當(dāng)中我們常常會對一些輸出的數(shù)據(jù)進(jìn)展一些統(tǒng)計(jì)計(jì)算,比方求和求平均值等常見的統(tǒng)計(jì)函數(shù)等等,甚至可以這么說,一個(gè)報(bào)表工具完善與否跟它所支持的統(tǒng)計(jì)函數(shù)及相關(guān)腳本的功能強(qiáng)大與否有著很大的關(guān)系。在ExcelReport中工具本身并不供給任何報(bào)表統(tǒng)計(jì)函數(shù)和腳本技術(shù),它只是利用Excel的豐富的函數(shù)庫來實(shí)現(xiàn)報(bào)表統(tǒng)計(jì)功能。之所以這么做主要是考慮到以下兩個(gè)方面:Excel性的同時(shí)又使的ExcelReport由于統(tǒng)計(jì)函數(shù)的實(shí)現(xiàn)不是在報(bào)表生成時(shí)去計(jì)算,因此削減了生成報(bào)表數(shù)據(jù)所需要花費(fèi)的時(shí)間。上面我們簡要介紹了ExcelReportExcel來看一個(gè)例子:$V{SUM<$F{ds.field1}*$F{ds.field2}>}這個(gè)例子的意思是,將dsfield1和field2通過Excel得sum來做乘法運(yùn)算。從這個(gè)例子我們可以看到,當(dāng)我需要在某個(gè)單元格生成一個(gè)Excel函數(shù),我們首先得把該函數(shù)包在一個(gè)$V{}標(biāo)記得模板定義語法當(dāng)中,這樣報(bào)表工具在分析該語法時(shí)就知道該處應(yīng)當(dāng)生成一個(gè)Excel‘=SUM<B3*C3>’生成該語句是由于最近一個(gè)$F{ds.field1}和$F{ds.field2}的B3C3計(jì)算的效果?!?SUM<12*20>’生成該語句是由于報(bào)表工具在模板文件中無法找到$F{ds.field1}和$F{ds.field2dsfield1field2對應(yīng)的當(dāng)前值,并用該值來生成相應(yīng)的sum下面所列表格我具體介紹了在制作報(bào)表模板時(shí)我們可在$V{}中使用的一些模板元素,及其在$V{}中的作用。模板元素$F{ds.field1}$P{param}$V{variable}例如:

說明Excel$F{ds.field1}有以下幾種意思:模板單元格的引用假設(shè)我們在Excel函數(shù)模板定義<$V{}>中定義的$F{}在當(dāng)前格的引用,即在$V{}中$F{}對應(yīng)位置的值會被被引用的單元$F{ds.field1A2那么$V{}中的引用值就是A2。需要留意的是該值在不同的數(shù)$V{SUM<$F{ds.field1}dsband則該模板的意思是對ds字段field1bandds.field1的前一個(gè)值進(jìn)展求和〔其實(shí)結(jié)果就是該字段值本身。同理,對分組的意思也是一樣,當(dāng)我們在分組的結(jié)尾區(qū)使用$V{SUM<$F{ds.field1}}則表示對當(dāng)前分組中的字段field1的全部值進(jìn)展求和。數(shù)據(jù)源實(shí)際值的引用在Excel$P{param}是引用參數(shù)param該值在生成報(bào)表時(shí)最終會用param在Excel函數(shù)模板定義中使用$V{variable}是引用變量名尾variable,variable生成報(bào)表數(shù)據(jù)時(shí)最終會被variable配置一個(gè)卡片式報(bào)表的模板文件配置一個(gè)列表式報(bào)表的模板文件配置一個(gè)主從列表式報(bào)表的模板文件配置一個(gè)分組報(bào)表的模板文件:testGroup配置一個(gè)主從帶分組功能的模板文件常見問題:字段模板大小寫問題,當(dāng)你覺察報(bào)表上就是無法輸出數(shù)據(jù)時(shí),首先需檢查你的模板定義的字段名稱是否有大小寫問題,很多數(shù)據(jù)庫中檢索出來的字段名稱默認(rèn)就是大寫的,報(bào)表工具在匹配字段值時(shí)是大小寫敏感的。因此有可能無法找到字段值的狀況為什么需要設(shè)計(jì)報(bào)表嵌入對象?固然對于大多數(shù)簡潔的報(bào)表,你確實(shí)可以不用使用報(bào)表嵌入對象來設(shè)計(jì)你的報(bào)表,比方全部報(bào)表用到的數(shù)據(jù)源中的數(shù)據(jù)都可以通過在數(shù)據(jù)源中配置一條sql語句來實(shí)現(xiàn),確實(shí)在這種狀況下你完全可以充分體驗(yàn)ExcelReport數(shù)據(jù)庫檢索數(shù)據(jù),并把數(shù)據(jù)一個(gè)個(gè)放到Excel文件里并需要把握麻煩的輸出格式而言。但并不是全部的數(shù)據(jù)都可以由一條sql語句來構(gòu)建,比方一些簡潔的數(shù)據(jù)源,其數(shù)據(jù)你可能無法通過單句的sql就能檢索出來,或是不想在程序里面違反唯一性規(guī)章,你想重用原來的業(yè)務(wù)類,在這樣一些狀況下你通常就需要自己手動(dòng)來構(gòu)建你的數(shù)據(jù)源,那現(xiàn)在的問題是在這種情況下我們以一種怎樣便利的可配置的方式來插入我們的數(shù)據(jù)源構(gòu)建代碼?ExcelReport在處理這個(gè)問題是通過一種嵌入對象的方式,讓用戶可以編寫自己的數(shù)據(jù)處理對象,并把該對象以一種可配置的方式嵌入到報(bào)表工具中時(shí)機(jī)來執(zhí)行用戶自己定義的代碼。該機(jī)制跟我們尋常在Struts中嵌入我們自己的Action來處理頁面懇求的原理是全都的。信任到這里你已經(jīng)或許了解了為什么在Excelreport嵌入對象里面我們可以做的事情還遠(yuǎn)不止這些。接下來會簡潔介紹一下,如何讓一個(gè)我們自己編寫的類嵌入到報(bào)表工具中去,并讓報(bào)表工具來調(diào)用我們的類對象。編寫自己的嵌入對象需要做以下兩方面的工作:execute據(jù)源處理代碼。將你寫好的類嵌入到報(bào)表工具中,通過在配置文件中配置EmbeddedObject節(jié)點(diǎn)〔參考我們可以在嵌入對象里面做些什么?嵌入業(yè)務(wù)處理類時(shí)需要繼承,該接口中有一個(gè)函數(shù)必需實(shí)現(xiàn):publicbooleanexecute<ReportConfigreportConfig,//MapMapdataSources,MapMap

//報(bào)表數(shù)據(jù)源//傳入?yún)?shù)。>throwsException{}參數(shù):dataSources保存了全部已經(jīng)實(shí)例化的數(shù)據(jù)源對象,但需要留意此時(shí)的數(shù)據(jù)源大局部還只進(jìn)展初始化工作,并未檢索數(shù)據(jù);一個(gè)數(shù)據(jù)源只有當(dāng)其真正使用數(shù)據(jù)時(shí)才會去檢索數(shù)據(jù)。此時(shí)拿到dataSources可以調(diào)用:DataSourceds=<DataSource>dataSources.get<“groupDs“>;來獵取你想要的數(shù)據(jù)源對象,groupDs是配置文件中具體報(bào)表配置的數(shù)據(jù)源對象。參數(shù):params保存了客戶頁面懇求提交過來的全部參數(shù),有些參數(shù)也可以在此處添加,并非確定要放在頁面懇求中傳遞過來。參數(shù):reportConfig臨時(shí)未使用,其主要包含的是當(dāng)前報(bào)表的相關(guān)配置信息。1假設(shè)配置的數(shù)據(jù)源是一個(gè)靜態(tài)類型的數(shù)據(jù)源,就需要在此時(shí)初始化該數(shù)據(jù)源中的數(shù)據(jù)。可以調(diào)用ds.addField來添加一個(gè)字段的值,在添加完一行元素的全部列字段的值后緊接著調(diào)用ds.addRecord<>;來將全部字段參與數(shù)據(jù)源。并將記錄滾動(dòng)到下一行。還有一種跟快捷的方法往數(shù)據(jù)源中添加數(shù)據(jù),那就是調(diào)用ds.setRecordList接口可一次將一個(gè)listlist包含的是mapMap必需以字段,字段值的形式保存。比方list1MapMap為Key=idValue=20230Key=nameValue=AJUN$F{groupDs.id}和$F{groupD}了;〔留意區(qū)分groupDs和ds,前者是在模板中使用的變量,后者是在java其他有關(guān)DataSource相關(guān)的接口可參考javadoc2、配置參數(shù)值params中添加或修改params中指定參數(shù)的值。留意params地方使用:a、ReportConfig.XML配置文件中使用。引用形式:$P{paramName}。但必需留意初始化配置文件相關(guān)數(shù)據(jù)是在調(diào)用嵌入對象的execute函數(shù)前使用,因此在配置文件中引用的參數(shù)必需是頁面中傳入的參數(shù),而不是在嵌入代碼中設(shè)置的參數(shù)。b、在模板文件中使用。引用形式:$P{paramName}。c、在嵌入的java代碼中使用。params.get<“paramName“>;3、配置查詢監(jiān)聽器查詢監(jiān)聽器主要是給主從報(bào)表使用的,由于從報(bào)表中的數(shù)據(jù)必需依據(jù)主報(bào)表中的某個(gè)記錄的特定字段的值來動(dòng)態(tài)查詢得到,此時(shí)就必需使用查詢監(jiān)聽器,以便動(dòng)態(tài)獵取查詢參數(shù),來檢索從記錄對應(yīng)的數(shù)據(jù)。查詢監(jiān)聽器的設(shè)置主要分三個(gè)相關(guān)方面:a調(diào)用ds.setQueryDataListener<>;參數(shù)為實(shí)現(xiàn)了IQueryDataListener對象。bBaseDataSource

溫馨提示

  • 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

提交評論