需要用到的jar包有freemarker-2.3.18.jar,freemarker-util-0.0.1-SNAPSHOT.jar,jxl-2.6.10.jar,jxl-report-1.0.jar,这些网上都有,可以去找
来吧,直接上干货。excel模板如图:
很容易理解,需要填充的内容用EL表达式替代即可。
上代码吧:
// 生成Excel
ReportEnginer enginer = new ReportEnginer();
String modelPath = request.getServletContext().getRealPath("/")
+ "/static/model/验收单模板.xls"; //模板的路径
InputStream inputStream = new FileInputStream(new File(modelPath));
//下载有两种方式,1.先生成excel存到服务器,再从服务器下载下来 2.直接导出excel
先来第一种:
//第一步,先存到服务器
String path = "";//这个是服务器上保存excel的路径
File dir = new File(path);
if (!dir.exists()) {// 判断路径是否存在
dir.mkdirs(); // 可以在不存在的目录中创建文件夹
}
path += "test.xls"; // excel的文件名
OutputStream outputStream = new FileOutputStream(new File(path));
try {
enginer.excute(inputStream, map, outputStream);
} catch (Exception e) {
e.printStackTrace();
}
inputStream.close();
outputStream.close();
//第二步,下载
try {
// path是指欲下载的文件的路径。
File file = new File(path);
// 取得文件名。
String filename = file.getName();
// 设置响应头,控制浏览器下载该文件
response.setHeader("content-disposition", "attachment;filename="
URLEncoder.encode(filename, "UTF-8"));
// 读取要下载的文件,保存到文件输入流
FileInputStream in = new FileInputStream(pdfPath);
// 创建输出流
OutputStream out = response.getOutputStream();
// 创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
// 循环将输入流中的内容读取到缓冲区当中
while ((len = in.read(buffer)) > 0) {
// 输出缓冲区的内容到浏览器,实现文件下载
out.write(buffer, 0, len);
}
// 关闭文件输入流
in.close();
// 关闭输出流
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
至此,第一种就搞定了.第二种:
ReportEnginer enginer = new ReportEnginer();
InputStream inputStream = new FileInputStream(new File(excelTempletePath));
response.setContentType("application/vnd.ms-excel");
OutputStream outputStream = response.getOutputStream();
enginer.excute(inputStream, map, outputStream);
inputStream.close();
outputStream.close();
里面map的内容如下:
{ "C_ID": 9, "C_NUM": "YS1709040001", "C_NAME": "在线办公平台", "C_CODE": "HT0010", "C_AMOUNT": 700000, "C_DATE": "2017-05-24", "C_APPLICANTNAME": "Test", "C_DEPT": "南天门", "C_STATE": "14", "C_SUPPLIER": "供应商", "C_BUYNUMBER": " ", "eqList": [ { "E_ID": 9, "E_NAME": "笔记本电脑", "E_ITEMTYPE": "通用设备、专业设备", "E_ITEM": "其它计算机设备及软件", "E_MODEL": "型号", "E_TECHNICALPARAMETERS": "技术参数", "E_NOTE": "备注", "E_FACTORY": "生产厂家", "E_BRAND": "品牌", "E_UNITPRICE": 6000, "E_NUM": 2, "TOTALPRICE": 12000, "ROWNUM": 1, "C_BUYNUMBER": " ", "P_ISIMPORT": "是", "installList": [ { "L_SERIAL_NUM": 1, "L_FACTORY_NO": "154131", "L_INSTALLATIONLOCATION": "111" }, { "L_SERIAL_NUM": 2, "L_FACTORY_NO": "1541444", "L_INSTALLATIONLOCATION": "222" } ] } ], "A_DELIVERYDATE": "2017-09-04", "A_DELIVERYADDRESS": "丰盛的覅", "A_ACCEPTANCEDATE": "2017-09-05", "A_ACCEPTANCEADDRESS": "第三方", "acceptExpertList": [ { "E_ID": 0, "E_NAME": "test", "E_IDCARD": "test", "E_UNIT": "电子工程学院", "E_POSITION": "fsdgfdsgdf", "E_TITLE": "aa1", "E_CONTACTPHONE": "02885013835", "E_PHONE": "18583929312", "E_EAMIL": "18688888888@qq.com", "E_ADDRESS": "成都", "E_PROFESSIONAL": "在不安也很近黄金时代", "B_NAME": "校内", "ROWNUM": 1 }, { "E_ID": 1, "E_NAME": "pingzong", "E_IDCARD": "pingzong", "E_UNIT": "电子工程学院", "E_POSITION": "fe", "E_TITLE": "fes", "E_CONTACTPHONE": "028-85465853", "E_PHONE": "13161519203", "E_EAMIL": "efw@qq.com", "E_ADDRESS": "fewfaw", "E_PROFESSIONAL": "fafeaf", "B_NAME": "校内", "ROWNUM": 2 } ]}
就是这些了,上一个最后导出来excel的图: