1. 概述
某些時候我們希望可以呼叫別的伺服器中的 Excel 資料集。
透過 JSP 頁面中呼叫 Excel 檔案,透過 URL 方式存取此 JSP 頁面來將別的伺服器中的 Excel 檔案作為資料集。
2. 定義遠端 Excel 檔案資料集
2.1 準備 Excel 檔案
建立 test.xlsx 檔案,如下圖:
2.2 建立 jsp 檔案
注:jsp 檔案的檔案名稱請使用英文,否則會連結失敗。
注:jsp 檔案修改後請刪除所有中文註釋
建立「download.jsp」,程式碼如下:
<%@ page contentType="application/vnd.ms-excel" language="java" import="java.io.*" pageEncoding="UTF-8"%>
<%
response.reset();
<%可以加也可以不加%>
response.setContentType("application/x-download");
<%可以帶一個id參數,需要下載的檔案id,可以以id作為檔案名稱存放,比如下面的test.xlsx;%>
String fileid=request.getParameter("id");
<%如果沒傳id參數,設定fileid為空字串,讀test.xlsx,%>
if(fileid==null) fileid="";
<%實際存放的檔案路徑與檔案名稱,可以用相對路徑,也可以用伺服器磁碟上絕對路徑,如"c:/test.xlsx";%>
String path = request.getRealPath("/")+"test"+fileid+".xlsx";
<%String path = "c:/a.xlsx"; %>
<%下載檔案名稱,這個無所謂 %>
String downloadname = "abc";
response.addHeader("Content-Disposition","attachment;filename=" + downloadname);
<%定義輸入匯出流,讀取檔案%>
java.io.OutputStream outStream = null;
java.io.FileInputStream in = null;
try
{
outStream = response.getOutputStream();
in = new FileInputStream(path);
byte[] b = new byte[1024];
int i = 0;
while((i = in.read(b)) > 0)
{
outStream.write(b, 0, i);
}
<%強制匯出緩衝區%>
outStream.flush();
<%更新out物件%>
out.clear();
out = pageContext.pushBody();
}
catch(Exception e)
{
System.out.println("Error!");
e.printStackTrace();
}
finally
<%釋放檔案%>
{
if(in != null)
{
in.close();
in = null;
}
}
%>
將此 Excel 檔案和 JSP 頁面放在 Tomcat 下的項目資料夾中,比如 apptest 中,如下圖:
注:JSP 檔案需要 Tomcat 或者 WebLogic 等伺服器才支援。
2.3 建立檔案資料集
在設計器中建立一個檔案資料集,檔案類型-Excel,URL 填寫 download.jsp 的存取路徑,例如: http://www.finereporthelp.com:8181/apptest/download.jsp
根據實際情況選擇是否第一行包含列標題,預覽,就可以看到此 Excel 檔案的內容了,如下圖:
2.4 效果查看
設定完後,可以看到範本資料集中會增加一個名為 'File1' 的資料集,如下圖:
至此,遠端 Excel 資料集建立完成了,就可以像其他資料集一樣使用了。
2.5 擴展
注:如果需要用此 download.jsp 處理多個 Excel 檔案,download.jsp 提供了一個id參數,在 JSP 中處理不同 ID 對應的 Excel 檔案即可
http://www.finereporthelp.com:8181/apptest/download.jsp?id=1 可以獲取名為 test1.xlsx 檔案的資料集(前提是此 Excel 檔案存在,否則傳回失敗)。
http://www.finereporthelp.com:8181/apptest/download.jsp?id=2 可以獲取名為 test2.xlsx 檔案的資料集,依次類推。