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 文件的数据集,依次类推。