潤乾V5實現展現報表的同時匯出excel
一些客戶提出需求希望在展現報表的時候,報表在後臺被自動匯出成excel到指定的路徑,而不用手動去點選匯出excel的按鈕。這個需求可以用潤乾的API來實現。
實現後臺自動匯出excel的思路為:用API讀入需要匯出的raq檔案,然後使用API計算報表,得到計算好的IReport物件,使用這個IReport物件匯出excel到指定的路徑,然後用bean的方式釋出報表。
實現後臺自動匯出excel到指定路徑的jsp程式碼如下所示:
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="/WEB-INF/raqsoftReport.tld" prefix="report" %>
<%@ page import="com.raqsoft.report.model.ReportDefine"%>
<%@ page import="com.raqsoft.report.usermodel.Context"%>
<%@ page import="com.raqsoft.report.usermodel.Engine"%>
<%@ page import="com.raqsoft.report.usermodel.IReport"%>
<%@ page import="com.raqsoft.report.util.ReportUtils"%>
<%@ page import="java.util.Enumeration"%>
<%@ page import="java.util.HashMap"%>
<html>
<body topmargin=0 leftmargin=0 rightmargin=0 bottomMargin=0 >
<%
//第一步,讀取報表模板
String report = request.getParameter( "rpx" );
String reportFile=application.getRealPath("/WEB-INF/reportFiles/"+report);
HashMap map=new HashMap();
Enumeration paramNames = request.getParameterNames();
if(paramNames!=null){
while(paramNames.hasMoreElements()){
String paramName = (String) paramNames.nextElement();
String paramValue=request.getParameter(paramName);
//把引數名和引數值分別加入到hashmap的key和value裡
map.put(paramName,paramValue);
}
}
ReportDefine rd = (ReportDefine) ReportUtils.read(reportFile);
//第二步,運算報表
Context context = new Context();
context.setParamMap(map);
Engine enging = new Engine(rd, context);
IReport iReport = enging.calc();
//匯出
String fileName = "E:/123.xls";
try {
ReportUtils.exportToExcel(fileName, iReport, true);
} catch (Throwable e) {
e.printStackTrace();
}
request.setAttribute("ireport",iReport);
%>
<table align=left>
<tr><td>
<report:html name="report1"
srcType="defineBean"
beanName="ireport"
funcBarLocation="top"
exceptionPage="/reportJsp/myError.jsp"
/>
</td></tr>
</table>
</body>
</html>
將以上程式碼儲存為 excel.jsp 檔案儲存到web\webapps\demo\reportJsp 這個目錄下面。然後通過這個excel.jsp 去訪問報表。然後在對應的目錄下面查看回發現。excel檔案已經儲存到了對應的目錄下面。