多個潤乾報表,匯出到一個excel中的不同sheet頁中
潤乾報表作為報表編輯工具使用起來十分的簡單方便,只需要簡單的屬性設定便可以實現匯出、列印等功能(具體參見潤乾開發應用文件),令人很鬱悶的是潤乾的匯出只是單表的匯出。
最近就有這麼一個需求:有很多.raq報表檔案,在一個頁面中列出所有的檔案的名稱,通過複選框選中下載,要求匯出到一個excel中,分不同的sheet頁展示(不知各位是否明白此需求,我的表達能力有限請見諒)。
鬱悶了我好一陣子,問同事都沒有這麼做過!
閒著沒事翻看潤乾jar包,發現了一些端倪。在潤乾安裝目錄裡有潤乾API,閒著沒事可以翻閱。
API中有ExcelReport類可以幫助我們實現上面的需求。
話不多說看程式碼:
- package cn.com.victorysoft.wellinfo.util;
- import java.io.FileOutputStream;
- import java.sql.Connection;
- import java.util.Map;
- import javax.sql.DataSource;
- import org.springframework.jdbc.core.JdbcTemplate;
- import com.runqian.base4.util.DBTypes;
- import com.runqian.report4.usermodel.Context;
- import com.runqian.report4.usermodel.DataSourceConfig;
- import com.runqian.report4.usermodel.Engine;
- import com.runqian.report4.usermodel.IReport;
- import com.runqian.report4.util.ReportUtils;
- import com.runqian.report4.view.excel.ExcelReport;
- public class ExportReport {
- private String reportPath = "";
- private String excelPath="";
- private String excelFileName;
- private DataSource dataSource;
- private String reportDataSource;
- private int dbType = DBTypes.ORACLE;
- private boolean needTranContent = true;
- private String dbCharset = "GBK";
- private String clientCharset = "GBK";
- private boolean needTranSentence = false;
- public void saveExcel(Map param, Map macro, String[] reportName, String[] sheetName)
- throws Exception{
- int flag = 0;
- ExcelReport erp=null;
- JdbcTemplate JT = new JdbcTemplate();
- JT.setDataSource(this.dataSource);
- Connection con = JT.getDataSource().getConnection();
- DataSourceConfig dsoc = new DataSourceConfig(this.dbType, this.needTranContent,
- this.dbCharset, this.clientCharset, this.needTranSentence);
- //判斷excelFileName是不是為“”或null,以及是不是excel型別
- if(!"".equals(this.null2blank(this.excelFileName)) && this.isExcelFile(this.excelFileName)){
- FileOutputStream fos = new FileOutputStream((this.null2blank(this.excelPath)+this.excelFileName).trim());
- try {
- erp = new ExcelReport();
- } catch (Throwable e) {
- e.printStackTrace();
- }
- if(reportName != null && reportName.length>0){
- //初始化陣列
- IReport[] rd = new IReport[reportName.length];
- Context[] context = new Context[reportName.length];
- Engine engine[] = new Engine[reportName.length];
- IReport iReport[] = new IReport[reportName.length];
- //如果sheetName為空或者長度為零,那麼設定預設選項
- if (sheetName == null || sheetName.length<=0) {
- sheetName = new String[reportName.length];
- for (int i = 0; i < reportName.length; i++) {
- sheetName[i] = "report_"+String.valueOf(i);
- }
- }
- for (int i = 0; i < reportName.length; i++) {
- if(!"".equals(this.null2blank(reportName[i]))){
- //讀取報表模板,把*.raq檔案讀入記憶體,並例項化ReportDefine
- rd[i] = ReportUtils.read((this.null2blank(this.reportPath)+reportName[i]).trim());
- //新建上下文物件,在上下文物件中設定資料來源
- context[i] = new Context();
- context[i].setDefDataSourceName(this.reportDataSource);
- context[i].setConnection(this.reportDataSource,con);
- context[i].setDataSourceConfig(this.reportDataSource, dsoc);
- //設定引數和巨集
- if(param != null && param.size()>0){
- context[i].setParamMap(param);
- }
- if(macro != null && macro.size()>0){
- Object[] array = macro.keySet().toArray();
- for (int j = 0; j < array.length; j++) {
- context[i].setMacroValue(array[j].toString(), macro.get(array[j]).toString());
- }
- }
- //運算報表,並在頁面上輸出報表
- engine[i] = new Engine(rd[i],context[i]);
- iReport[i] = engine[i].calc();
- //構建每個sheet頁
- erp.addPage(iReport[i],sheetName[i]);
- flag ++;
- }
- }
- }else {
- throw new Exception("reportName為“”或null");
- }
- //匯出Excel
- if (flag != 0) {
- erp.out(fos);
- }
- fos.flush();
- fos.close();
- }else {
- throw new Exception("excelFileName為“”或null或不是excel型別");
- }
- }
- private String null2blank(String variable) {
- if (variable == null)
- variable = "";
- return variable;
- }
- private boolean isExcelFile(String excelName){
- boolean is = false;
- if(excelName.endsWith(".xls") || excelName.endsWith(".xlsx")){
- is = true;
- }
- return is;
- }
- public String getReportPath() {
- return reportPath;
- }
- public void setReportPath(String reportPath) {
- this.reportPath = reportPath;
- }
- public String getExcelPath() {
- return excelPath;
- }
- public void setExcelPath(String excelPath) {
- this.excelPath = excelPath;
- }
- public String getExcelFileName() {
- return excelFileName;
- }
- public void setExcelFileName(String excelFileName) {
- this.excelFileName = excelFileName;
- }
- public DataSource getDataSource() {
- return dataSource;
- }
- public void setDataSource(DataSource dataSource) {
- this.dataSource = dataSource;
- }
- public String getReportDataSource() {
- return reportDataSource;
- }
- public void setReportDataSource(String reportDataSource) {
- this.reportDataSource = reportDataSource;
- }
- public int getDbType() {
- return dbType;
- }
- public void setDbType(int dbType) {
- this.dbType = dbType;
- }
- public boolean isNeedTranContent() {
- return needTranContent;
- }
- public void setNeedTranContent(boolean needTranContent) {
- this.needTranContent = needTranContent;
- }
- public String getDbCharset() {
- return dbCharset;
- }
- public void setDbCharset(String dbCharset) {
- this.dbCharset = dbCharset;
- }
- public String getClientCharset() {
- return clientCharset;
- }
- public void setClientCharset(String clientCharset) {
- this.clientCharset = clientCharset;
- }
- public boolean isNeedTranSentence() {
- return needTranSentence;
- }
- public void setNeedTranSentence(boolean needTranSentence) {
- this.needTranSentence = needTranSentence;
- }
- }
以上是關鍵程式碼,完整程式碼示例請參見附加。程式碼排版有些亂,請童鞋們見諒,如果上面的程式碼不想看,就下載附件吧,附加註釋很詳細
相關推薦
多個潤乾報表,匯出到一個excel中的不同sheet頁中
潤乾報表作為報表編輯工具使用起來十分的簡單方便,只需要簡單的屬性設定便可以實現匯出、列印等功能(具體參見潤乾開發應用文件),令人很鬱悶的是潤乾的匯出只是單表的匯出。 最近就有這麼一個需求:有很多.raq報表檔案,在一個頁面中列出所有的檔案的名稱,通過複選框選中下載,要求匯出
在node中介軟體(微服務)架構中,用一個node去部署多個專案比較好,還是一個專案對應一個node比較好?
第一種: 一個專案對應一個node服務; 優點:前端跟node也是可以獨立開發,降低耦合,也可單獨部署; 缺點:一個專案對應一個node,專案多的話,維護不方便; 第二種:一個node下,部署多個專案,可以以這個node作為底盤,在點選進入專案時,讓其載入該專案
git本地倉庫關聯多個remote,怎麽用本地一個分支向不同remote不同分支推送代碼
mage pos 後繼 pre bsp 一次 nbsp 技術 text 我想這個問題,是大家關註的問題,這個問題,我非常關註。 背景:在公司開發項目,我們一般都要把項目推送到公司領導創建的一個遠程倉庫裏邊去,但是我們同時也有自己的小倉庫,這樣的話,如何方便的將我們的代
你需要實現一個高效的緩存,它允許多個用戶讀,但只允許一個用戶寫
讀寫鎖思路:java.util.concurrent.locks包下面ReadWriteLock接口,該接口下面的實現類ReentrantReadWriteLock維護了兩個鎖讀鎖和解鎖,可用該類實現這個功能,很簡單import java.util.Date; import java.util.concurr
潤乾報表報表組的展現--tab頁形式展現多張報表
業務系統中,很多報表都是沿用之前 EXCEL 的報表樣式,原來以 sheet 格式顯示的表,客戶在 web 端展現的時候也希望也有同樣的格式,潤乾在實現這種效果和 EXCEL 一樣簡單靈活,輕鬆將資料報表以多個 TAB 頁的形式展現在頁面中,達到了一同展現,同時進行查詢、列印、匯出 EXCEL 結果
一個頁面有多個script標籤時,執行順序
JavaScript直譯器在執行指令碼時,是按塊執行的。通俗地說,就是瀏覽器在解析HTML文件流時,如果遇到一個script標籤,則JavaScript直譯器會等到這個程式碼塊都載入完成後,先對程式碼塊進行預編譯,然後再執行。執行完畢後,瀏覽器會繼續解析下面的HTML文件流,同時JavaSc
Java:假設車庫有3個車位(可以通過boolean[]陣列來表示車庫)可以停車,寫一個程式模擬多個使用者開車離開,停車入庫的效果。注意:車位有車時不能停車。
假設車庫有3個車位(可以通過boolean[]陣列來表示車庫)可以停車,寫一個程式模擬多個使用者開車離開,停車入庫的效果。注意:車位有車時不能停車。 1)使用阻塞佇列來實現(BlockingQueue<T>) Producer類 package com.多執行緒停車問
多執行緒執行時,如果一個邏輯需要等若干個執行緒執行完成後再執行,怎麼實現?
實際開發過程中,尤其是大型的業務系統中或批量處理系統中,我們通常會用到多執行緒來進行任務拆分,來提高系統的處理能力。當對業務不斷拆分時,多執行緒各自任務之間也形成了錯綜複雜的關係。 我們常常遇到這樣的情況,業務模組A 拆分成了 A1 、A2.....An個多執行緒,來提高處理速度,可是 Ak(1<k&
38_javaWeb介面,多個排序欄位,使用者隨機選一個
0.可排序欄位:id,age,income 1.查詢介面中,有一個orderBy引數 2.如果使用者選擇的age,那麼就把orderBy引數的值設定成age 3.java中,虛擬碼如下(因為第4步中,我們會用$符號取值,在這裡防止sql注入): if(or
潤乾報表多維分析功能
可直接閱讀原文:http://c.raqsoft.com.cn/article/1535678317741?r=alice 分析控制元件功能 拖拽欄位 首先從分析控制元件本身的功能入手——開啟分析頁面第一件事是做什麼呢?對啦,當然是要展示報表了~脫離敲打複雜的查詢語句,
androidstudion 一個專案打包多個報名的APK,可以在同一個裝置上安裝
1.修改app的build.gradle檔案 假設我們同一套程式碼編譯2個app:demo1和demo2 android { ... productFlavors { // demo1 demo1 {
Tomcat配置多個Service,多個同名的應用執行在一個tomcat下
網站專案中有時候會碰到,每個網站一個網站後臺程式,偏偏因為某種原因,這後臺程式的名稱還是一樣的,比如都叫 app.war,這樣如果有2個或以上網站需要用各自的app.war,那麼就需要安裝多個tomcat,資源浪費比較大。也不好管理。有沒有一種可能,將這幾個app.war放到
多個視頻怎麽合成一個,什麽合並視頻軟件好用
size 工具 img pro watermark cto alt 多個 到你 視頻的剪輯和合成是使用較多的一個功能,平時自己錄制視頻可能都會分享到社交平臺上,然而在分享之前,我們必然會做很多的處理,比如濾鏡,美顏,分割,合成等等的操作,前兩者很簡單,那怎麽將錄制的幾個視頻
一個總店與多個分店的情況,要求每天分店將業務資料上傳到總店
1. 伸縮性 伸縮性是衡量應用在同一時間內能夠處理多少使用者的尺度。也是反映應用程式能否滿足重要應用的一個指標。 在你的應用程式中到底可以容納多少使用者,每個使用者每隔多久向伺服器提交一次請求,你的使用者所處的位置,如區域網還是interner中。這些問題在設計應用的時候,你需要
Excel VBA 迴圈讀取一個目錄下面多個檔案的內容,放到另外一個檔案中
迴圈讀取一個目錄下面多個檔案的內容,放到另外一個檔案中 Public Sub getInputInfo() On Error GoTo errl 'OUT対象ファイル開く Dim wbOut As Workbook Applicati
潤乾報表v4-展現報表同時後臺匯出excel
有些客戶提出需求希望在展現報表的時候,報表在後臺被自動匯出成excel到指定的路徑,而不用手動去點選匯出excel的按鈕。這個需求可以用潤乾的API來實現。 實現後臺自動匯出excel的思路為:用API讀入需要匯出的raq檔案,然後使用API計算報表,得到計算好的IRepo
潤乾報表頁面超過255列匯出excel
最近接觸到一些客戶的需求,客戶想在頁面展現的時候不分頁,然後在匯出excel的時候分頁,而客戶的報表列數很多,超過了excel的255列的限制。這樣如果不做任何處理,直接在頁面上點選匯出excel的按鈕,就會彈出對話方塊提示excel不支援超過255列,也就無法正常匯
潤乾報表隔行異色,N行異色,分層異色
隔行異色是潤乾報表的一大特色,它使得報表的可讀性更強,頁面也更加美觀。利用背景色單元格內的IF函式及row()函式獲取當前行號,可以讓相鄰行的單元格異色。 其實還有一種拓展性更強的方式:case()函式,case(row()%2,list(0),rgb(25
MYSQL建立一個 “將一個字串以某個分隔符分隔得到多個值” 的函式,併為多個值加上序號
1:首先建立一個自定義函式實現分隔的功能:思路: (1、獲取分隔符在源字串中第一次出現的位置,把獲取的位置之前的子字串賦值給表的一列 (2、把第一步獲取的位置之後的子字串賦值為新的源字串 (3、再獲取分隔符在第二步得到的新的源字串中的位置,並把獲取的位置之前的子字串賦值給表
解決潤乾報表匯出Excel後0丟失的問題
需求背景 今天我們來看一個比較有價值的需求,這個需求中提到的一系列問題我們可能也會遇到並感到難以解決。好,閒話少敘,看一下具體需求: 1、 報表中的0.XXX匯出Excel後0丟失,變成了.XXX,如0.5變成.5; 2、 報表資料集中資料有存在空和0的資料,在報表顯示的時候要求空值不顯示,0值顯示0,