好久之前做的功能,现在项目又有这个需求,故在此记录一下。
需要jar包:
如果是 maven项目需要引入下面这个就可以
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.3</version>
</dependency>
如果不是maven:https://download.youkuaiyun.com/download/mufeng633/11097086
伪代码:
import net.sf.jxls.exception.ParsePropertyException;
import net.sf.jxls.transformer.XLSTransformer;
public Object exportToProveExcel(){
try {
Map<String, String> dataMap = getService().selectdatas(dataId, tableId);
//下载文件
if (dataMap.size() > 0 ) {
String currntTime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
Map<String,Object> cMap = new HashMap();
Map<String,Object> messMap = new HashMap();
//结婚证明Excel模板
String srcFilePath = ServletActionContext.getServletContext().getRealPath("WEB-INF/template/结婚证明(A4)0921 (1).xls");
String newFileName = "结婚证明 "+currntTime;
messMap.put("man",dataMap.get("MAN")); //男方姓名
messMap.put("woman",dataMap.get("WOMAN")); //女方姓名
cMap.put("vms", messMap);
HttpServletResponse response = ServletActionContext.getResponse();
response.reset();
response.setContentType("application"+ File.separator+"vnd.ms-excel"); //下载文版类型
response.addHeader("Content-Disposition", "attachment;filename="+new String( newFileName.getBytes("gb2312"), "ISO8859-1" )+".xls");
//生成的临时导出文件
File destFile = File.createTempFile(newFileName, ".xls");
// 开始转换。利用 transformer 转到Excel
XLSTransformer transformer = new XLSTransformer();
// 参数:srcFilePath:模板源文件 cMap:需要导出的数据 destFile.getAbsolutePath():下载的目标文件
transformer.transformXLS(srcFilePath, cMap, destFile.getAbsolutePath());
FileInputStream fis = new FileInputStream(destFile);
ServletOutputStream out = response.getOutputStream();
byte[] bytes = new byte[512];
int i = 0;
while ((i = fis.read(bytes)) !=-1){
out.write(bytes,0,i);
}
out.close();
fis.close();
destFile.delete();
}
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
return new DefaultHttpHeaders(SUCCESS).disableCaching();
}
Excel模板为:
如果需要循环,则可以这样:
添加循环体代码:
<jx:forEach items = "${vms}" var="var">
${var.UserName}
</jx:forEach>
其中: vms为外层的键
如:
最后导出的文件:
到此 完成。