天天看点

java根据Excel模板导出excel

好久之前做的功能,现在项目又有这个需求,故在此记录一下。

需要jar包:

如果是 maven项目需要引入下面这个就可以

<dependency>
          <groupId>net.sf.jxls</groupId>
          <artifactId>jxls-core</artifactId>
          <version>1.0.3</version>
      </dependency>
           

如果不是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, 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模板为:

java根据Excel模板导出excel

如果需要循环,则可以这样:

添加循环体代码:

<jx:forEach items = "${vms}" var="var"> 
		${var.UserName}
</jx:forEach>
           

其中: vms为外层的键

如:

java根据Excel模板导出excel

最后导出的文件:

java根据Excel模板导出excel

到此 完成。