中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

大數據中怎么對報表數據添加目錄

發布時間:2022-01-15 15:13:51 來源:億速云 閱讀:136 作者:柒染 欄目:大數據

小編今天帶大家了解大數據中怎么對報表數據添加目錄,文中知識點介紹的非常詳細。覺得有幫助的朋友可以跟著小編一起瀏覽文章的內容,希望能夠幫助更多想解決這個問題的朋友找到問題的答案,下面跟著小編一起深入學習“大數據中怎么對報表數據添加目錄”的知識吧。

需求描述:

在做一些類似 word 報告格式報表時,為了有更好的閱讀效果,經常需要在首頁增加一個目錄導航頁,這樣就能夠快速的知道關心的數據在第幾頁,但是報表不同于 word 文檔,word 文檔中格式都是固定的,所以能夠方便快速的生成目錄頁,在報表中數據都是動態變化的,并且通常會涉及到動態擴展,這樣很難固定目錄項,并且由于數據動態擴展,對應的頁碼也很難精確獲得,下面通過一個實例看下,如果在報表中動態增加目錄。

解決方案:

報表數據是動態的,所以設計時就不能用固定的目錄,需要報表計算后才能知道數據在第幾頁,潤乾報表提供了一個報表計算偵聽類,在 java 程序中可以動態獲取報表計算后的結果,并能夠在程序中動態更改單元格的值。

首先,看下報表模板的設計界面:

大數據中怎么對報表數據添加目錄

這個報表要對訂單數據按照地區進行匯總分析,并展示詳細數據,要求目錄中以地區為導航進行設置,報表前 5 行是目錄頁,第三行中,概要分析一般是固定的,這里就寫了固定一行,頁碼設置 2 就行。

A4:=ds1.group(貨主地區; 貨主地區:1),表達式按照地區進行分組,也就是目錄這塊按照地區進行展示,對應 E4 單元格后續要設置成目錄頁,此處暫時為空。

A5:目錄通常在第一頁,所以此處設置一個行后分頁

A7:就是一個固定的匯總描述,里邊可以用字符串拼接方式將固定文本和動態數據拼接在一起展示。

A8:=ds1.group(貨主地區; 貨主地區:1),按照地區進行分組

A9:對該地區數據做一個匯總說明

A10:=ds1.select(訂單 ID),取數訂單數據,B10 往后依次類推。

將 A9,A10,A11,A12 單元格的左主格設置成 A8,此片數據根據 A8 進行縱向擴展,這樣報表展示結果為:

大數據中怎么對報表數據添加目錄

這里可以看到,目錄項處列出了對應地區,接下來看下,如果給地區增加對應頁碼。

從報表結果中看到,第一頁中的目錄名稱和報表中的地區名稱相同,這樣就可以根據這兩個名稱做匹配,判斷如果名稱相同獲取數據區域的名稱所在的頁碼,放到對應目錄行就行,如數據區域的“東北”在第 2 頁,那么目錄中東北的頁碼應該為 2,接下來看下,如何給目錄設置動態的頁碼。

這里就用到了之前說到的報表偵聽類的使用,源碼如下:

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("報表總頁數"+arg1.getPageCount());
			IReport p1;
			try {
				 p1=arg1.getPage(1);//目錄通常在第一頁,所以獲取第一頁為目錄頁
				 int page=2;//設置數據初始循環頁,通常為第二頁
				 for(int i=3;i<=p1.getRowCount();i++){//目錄行從第三行開始
					String muluName=(String)p1.getCell(i, 2).getValue() ;//報表中設置第二頁為目錄名稱
					for(int j=page;j<=arg1.getPageCount();j++){//按照頁數進行循環,分別取分頁后每頁報表對象
						for(int k=1;k<=arg1.getPage(j).getRowCount();k++){//每頁中按照每行進行循環		
						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);//如果相同,則設置目錄頁第5列對應的值為對應頁碼,注意,此處是arg2對象
							arg2.getCell(i, 5).setHyperlink("javaScript:toPage('report1',"+j+")");//設置超鏈接
							page=j;//為提高計算效率,下次在循環時,不用從第2頁開始,從上次終端的頁碼開始就行
							break;//找到頁碼,跳出此處循環,提高效率
						}	
						}
					} 
				 }
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
	   } 
	   public void beforeCalc(Context arg0, IReport arg1) { 
	   } 
	
}

核心思路就是在類中根據名稱進行匹配,獲取頁碼,放到對應單元格中,將編譯好的類放到報表類路徑中,如:應用的 WEB-INF\classes 下,注意如果有包路徑,此處要要帶相應的路徑,放置過去后重啟應用,在頁面端訪問報表,結果如下:

大數據中怎么對報表數據添加目錄

可以看到,目錄后邊會生成對應的頁碼,word 中目錄有個功能點是,點擊頁碼,能夠快速跳轉到對應的頁數,報表中同樣可以增加對應的功能,報表提供了一個跳轉頁數的 js 函數,toPage,在 java 類中,在對應的頁碼單元格設置了一個超鏈接,調用這個 js 就行:

arg2.getCell(i, 5).setHyperlink("javaScript:toPage('report1',"+j+")");

這樣,在頁面端點擊頁碼,就能夠快速跳轉到對應頁數,當然,此功能要求報表在頁面端分頁后才有效,否則無法跳轉,并且如果導出到 word 的話,只能顯示頁數,無法跳轉。

通過這個例子可以看到,通過拿目錄項中的單元格數據和數據表中的單元格進行匹配,來獲取頁碼,但是在實際使用中,目錄頁中的目錄名稱和報表中的數據名稱可能并不完全一致,比如目錄頁中叫東北,報表數據中叫東北地區,很難嚴格匹配,這樣可以換種變通的方法,報表單元格屬性欄中有個注釋屬性,可以在這個里邊寫上和目錄項匹配的值,然后 java 類中可以根據這個屬性的值做匹配,這樣能夠實現更加靈活的效果。

感謝大家的閱讀,以上就是“大數據中怎么對報表數據添加目錄”的全部內容了,學會的朋友趕緊操作起來吧。相信億速云小編一定會給大家帶來更優質的文章。謝謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榆树市| 吉首市| 自贡市| 娄烦县| 龙游县| 天祝| 长沙市| 连云港市| 灵寿县| 乐陵市| 阿荣旗| 绵竹市| 奎屯市| 太仆寺旗| 八宿县| 牙克石市| 綦江县| 玛沁县| 二手房| 青田县| 义乌市| 郸城县| 五华县| 股票| 兴海县| 庆元县| 海城市| 赤城县| 乐清市| 马鞍山市| 泰州市| 沙河市| 吴桥县| 秦安县| 桂东县| 梨树县| 隆子县| 扬中市| 汉源县| 通城县| 深泽县|