小編今天帶大家了解大數(shù)據(jù)中怎么對報表數(shù)據(jù)添加目錄,文中知識點介紹的非常詳細(xì)。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內(nèi)容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著小編一起深入學(xué)習(xí)“大數(shù)據(jù)中怎么對報表數(shù)據(jù)添加目錄”的知識吧。
成都創(chuàng)新互聯(lián)是專業(yè)的慶安網(wǎng)站建設(shè)公司,慶安接單;提供成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行慶安網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊,希望更多企業(yè)前來合作!
需求描述:
在做一些類似 word 報告格式報表時,為了有更好的閱讀效果,經(jīng)常需要在首頁增加一個目錄導(dǎo)航頁,這樣就能夠快速的知道關(guān)心的數(shù)據(jù)在第幾頁,但是報表不同于 word 文檔,word 文檔中格式都是固定的,所以能夠方便快速的生成目錄頁,在報表中數(shù)據(jù)都是動態(tài)變化的,并且通常會涉及到動態(tài)擴(kuò)展,這樣很難固定目錄項,并且由于數(shù)據(jù)動態(tài)擴(kuò)展,對應(yīng)的頁碼也很難精確獲得,下面通過一個實例看下,如果在報表中動態(tài)增加目錄。
解決方案:
報表數(shù)據(jù)是動態(tài)的,所以設(shè)計時就不能用固定的目錄,需要報表計算后才能知道數(shù)據(jù)在第幾頁,潤乾報表提供了一個報表計算偵聽類,在 java 程序中可以動態(tài)獲取報表計算后的結(jié)果,并能夠在程序中動態(tài)更改單元格的值。
首先,看下報表模板的設(shè)計界面:
這個報表要對訂單數(shù)據(jù)按照地區(qū)進(jìn)行匯總分析,并展示詳細(xì)數(shù)據(jù),要求目錄中以地區(qū)為導(dǎo)航進(jìn)行設(shè)置,報表前 5 行是目錄頁,第三行中,概要分析一般是固定的,這里就寫了固定一行,頁碼設(shè)置 2 就行。
A4:=ds1.group(貨主地區(qū); 貨主地區(qū):1),表達(dá)式按照地區(qū)進(jìn)行分組,也就是目錄這塊按照地區(qū)進(jìn)行展示,對應(yīng) E4 單元格后續(xù)要設(shè)置成目錄頁,此處暫時為空。
A5:目錄通常在第一頁,所以此處設(shè)置一個行后分頁
A7:就是一個固定的匯總描述,里邊可以用字符串拼接方式將固定文本和動態(tài)數(shù)據(jù)拼接在一起展示。
A8:=ds1.group(貨主地區(qū); 貨主地區(qū):1),按照地區(qū)進(jìn)行分組
A9:對該地區(qū)數(shù)據(jù)做一個匯總說明
A10:=ds1.select(訂單 ID),取數(shù)訂單數(shù)據(jù),B10 往后依次類推。
將 A9,A10,A11,A12 單元格的左主格設(shè)置成 A8,此片數(shù)據(jù)根據(jù) A8 進(jìn)行縱向擴(kuò)展,這樣報表展示結(jié)果為:
這里可以看到,目錄項處列出了對應(yīng)地區(qū),接下來看下,如果給地區(qū)增加對應(yīng)頁碼。
從報表結(jié)果中看到,第一頁中的目錄名稱和報表中的地區(qū)名稱相同,這樣就可以根據(jù)這兩個名稱做匹配,判斷如果名稱相同獲取數(shù)據(jù)區(qū)域的名稱所在的頁碼,放到對應(yīng)目錄行就行,如數(shù)據(jù)區(qū)域的“東北”在第 2 頁,那么目錄中東北的頁碼應(yīng)該為 2,接下來看下,如何給目錄設(shè)置動態(tài)的頁碼。
這里就用到了之前說到的報表偵聽類的使用,源碼如下:
import com.raqsoft.common.Area; import com.raqsoft.report.usermodel.Context; import com.raqsoft.report.usermodel.IPagerListener; import com.raqsoft.report.usermodel.IReport; import com.raqsoft.report.usermodel.IReportListener; import com.raqsoft.report.usermodel.PageBuilder; import com.raqsoft.report.util.ReportUtils; public class createmulu implements IReportListener { public void afterCalc(Context arg0, IReport arg2) { PageBuilder arg1 = null; try { arg1 = new PageBuilder(arg2); } catch (Throwable e1) { // TODO Auto-generated catch block e1.printStackTrace(); } System.out.println("報表總頁數(shù)"+arg1.getPageCount()); IReport p1; try { p1=arg1.getPage(1);//目錄通常在第一頁,所以獲取第一頁為目錄頁 int page=2;//設(shè)置數(shù)據(jù)初始循環(huán)頁,通常為第二頁 for(int i=3;i<=p1.getRowCount();i++){//目錄行從第三行開始 String muluName=(String)p1.getCell(i, 2).getValue() ;//報表中設(shè)置第二頁為目錄名稱 for(int j=page;j<=arg1.getPageCount();j++){//按照頁數(shù)進(jìn)行循環(huán),分別取分頁后每頁報表對象 for(int k=1;k<=arg1.getPage(j).getRowCount();k++){//每頁中按照每行進(jìn)行循環(huán) String mName=arg1.getPage(j).getCell(k,1).getValue() != null ? arg1.getPage(j).getCell(k,1).getValue().toString() : "";//本例中目錄項在報表中的第一列,也就是A8單元格 if(mName!="" && mName==muluName){//判斷每頁中的目錄項和第一頁中的目錄名稱是否相同 arg2.getCell(i, 5).setValue(j);//如果相同,則設(shè)置目錄頁第5列對應(yīng)的值為對應(yīng)頁碼,注意,此處是arg2對象 arg2.getCell(i, 5).setHyperlink("javaScript:toPage('report1',"+j+")");//設(shè)置超鏈接 page=j;//為提高計算效率,下次在循環(huán)時,不用從第2頁開始,從上次終端的頁碼開始就行 break;//找到頁碼,跳出此處循環(huán),提高效率 } } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void beforeCalc(Context arg0, IReport arg1) { } }
核心思路就是在類中根據(jù)名稱進(jìn)行匹配,獲取頁碼,放到對應(yīng)單元格中,將編譯好的類放到報表類路徑中,如:應(yīng)用的 WEB-INF\classes 下,注意如果有包路徑,此處要要帶相應(yīng)的路徑,放置過去后重啟應(yīng)用,在頁面端訪問報表,結(jié)果如下:
可以看到,目錄后邊會生成對應(yīng)的頁碼,word 中目錄有個功能點是,點擊頁碼,能夠快速跳轉(zhuǎn)到對應(yīng)的頁數(shù),報表中同樣可以增加對應(yīng)的功能,報表提供了一個跳轉(zhuǎn)頁數(shù)的 js 函數(shù),toPage,在 java 類中,在對應(yīng)的頁碼單元格設(shè)置了一個超鏈接,調(diào)用這個 js 就行:
arg2.getCell(i, 5).setHyperlink("javaScript:toPage('report1',"+j+")");
這樣,在頁面端點擊頁碼,就能夠快速跳轉(zhuǎn)到對應(yīng)頁數(shù),當(dāng)然,此功能要求報表在頁面端分頁后才有效,否則無法跳轉(zhuǎn),并且如果導(dǎo)出到 word 的話,只能顯示頁數(shù),無法跳轉(zhuǎn)。
通過這個例子可以看到,通過拿目錄項中的單元格數(shù)據(jù)和數(shù)據(jù)表中的單元格進(jìn)行匹配,來獲取頁碼,但是在實際使用中,目錄頁中的目錄名稱和報表中的數(shù)據(jù)名稱可能并不完全一致,比如目錄頁中叫東北,報表數(shù)據(jù)中叫東北地區(qū),很難嚴(yán)格匹配,這樣可以換種變通的方法,報表單元格屬性欄中有個注釋屬性,可以在這個里邊寫上和目錄項匹配的值,然后 java 類中可以根據(jù)這個屬性的值做匹配,這樣能夠?qū)崿F(xiàn)更加靈活的效果。
感謝大家的閱讀,以上就是“大數(shù)據(jù)中怎么對報表數(shù)據(jù)添加目錄”的全部內(nèi)容了,學(xué)會的朋友趕緊操作起來吧。相信創(chuàng)新互聯(lián)小編一定會給大家?guī)砀鼉?yōu)質(zhì)的文章。謝謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!
新聞名稱:大數(shù)據(jù)中怎么對報表數(shù)據(jù)添加目錄
鏈接URL:http://www.chinadenli.net/article6/gcijog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、標(biāo)簽優(yōu)化、App開發(fā)、網(wǎng)站內(nèi)鏈、微信小程序、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)