【java根据Excel模板导出excel】好久之前做的功能,现在项目又有这个需求,故在此记录一下。
需要jar包:
如果是 maven项目需要引入下面这个就可以
net.sf.jxls
jxls-core
1.0.3
如果不是maven:https://download.csdn.net/download/mufeng633/11097086
伪代码:
import net.sf.jxls.exception.ParsePropertyException;
import net.sf.jxls.transformer.XLSTransformer;
public Object exportToProveExcel(){
try {
Map, String> dataMap = getService().selectdatas(dataId, tableId);
//下载文件
if (dataMap.size() > 0 ) {
String currntTime = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
Map,Object> cMap = new HashMap();
Map,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模板为:
文章图片
如果需要循环,则可以这样:
添加循环体代码:
${var.UserName}
其中: vms为外层的键
如:
文章图片
最后导出的文件:
文章图片
到此 完成。