多張報表導出同一張excel

 

最近一段時間在解決客戶問題的過程中,遇到這樣一個需求,客戶希望將多個自己的報表文件導入到一個excel文件中,導成excel的多個sheet頁,從而更直觀的展現自己的數據,查看起來也更方便一些。下面就用一個例子實現上面的需求。
實現思路:在報表應用的JSP中編寫API代碼,將傳過來的多個報表文件分別計算,得到IReport對象,分別將每個IReport對象導出到一個ExcelReport對象中,在導出時給每個IReport對象起一個不同的名字。
第一步:製作三張報表(這裏以三張爲例)
製作三張報表,連接demo數據源,三張報表的信息如下:
第一張報表數據集ds1的sql爲:SELECT 產品.產品ID,產品.產品名稱,產品.單價 FROM 產品 報表的樣式如下圖所示:
第二張報表數據集ds1的sql爲:SELECT 類別.類別ID,類別.類別名稱,類別.說明 FROM 類別 報表的樣式如下圖所示:
第三張報表數據集ds1的sql爲:SELECT 運貨商.公司名稱,運貨商.電話,運貨商.運貨商ID FROM 運貨商 報表的樣式如下圖所示:
第二步:編寫導出三張報表的JSP文件。
jsp文件的內容如下:
<%@ page language=”java” contentType=”text/html; charset=gbk”
pageEncoding=”gbk”%>
<%@page
import=”com.runqian.report4.usermodel.*,com.runqian.report4.util.*,com.runqian.report4.model.ReportDefine”%>
< %@ page import=”java.io.*,com.runqian.report4.usermodel.DataSetConfig,java.util.*,com.runqian.report4.view.excel.ExcelReport”%>
< %
List<String> list = new ArrayList<String>();
list.add(“F:/1.raq”);
list.add(“F:/2.raq”);
list.add(“F:/3.raq”);
System.out.println(“共有”+list.size()+”個raq文件”);
OutputStream os = new FileOutputStream(“F:/Reports.xls”);
ExcelReport er = new ExcelReport();
for(int i = 0; i<list.size(); i++){
ReportDefine rd = (ReportDefine)ReportUtils.read(list.get(i));
Context ctx = new Context();
Engine engine = new Engine(rd,ctx);
IReport ireport = engine.calc();
System.out.println(“i=============”+i);
er.export(“sheet_”+String.valueOf(i),ireport);
}
er.saveTo(“F:/Reports.xls”);
//System.out.println(“已經導出了一個sheet_”+i);
os.close();

%>
第三步:運行jsp,導出報表文件。
把上面的jsp放到應用中,然後訪問上面的jsp,就會看見三張報表被導出到了指定的路徑,具體的樣式如下圖所示。
在客戶實際應用的過程中,根據上面的代碼把需要導出的報表路徑都寫到一個list裏面就可以了,可以直接套用下面的循環,這樣減少了代碼量,也更直觀。
通過上面幾步就可以將多張報表導入到同一個excel裏面了。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章