java根据Excel模板导出excel

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

需要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模板为:
其中,vms就是外层cMap的键

如果需要循环,则可以这样:
添加循环体代码:

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

其中: vms为外层的键
如:
在这里插入图片描述

最后导出的文件
在这里插入图片描述

到此 完成。

根据excel模板动态导出数据库数据 package text; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet.ServletContext; import net.sf.jxls.transformer.XLSTransformer; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class TextAction extends ActionSupport { /** */ private static final long serialVersionUID = 1L; private String filename; @SuppressWarnings("rawtypes") public String export() throws Exception { String templateFile = "18.xls"; // String sql = "select * from t_ry order by rybm"; // exportAndDownload(templateFile, DataBase.retrieve(sql)); List datas = new ArrayList(); @SuppressWarnings("unchecked") HashMap map = new HashMap(); map.put("name", "1111"); datas.add(map); exportAndDownload(templateFile, datas); return SUCCESS; } @SuppressWarnings({ "rawtypes", "unchecked" }) public void exportAndDownload(String templateFile, List datas) { try { filename = UUID.randomUUID() + templateFile; // FacesContext context = FacesContext.getCurrentInstance(); // ServletContext servletContext = (ServletContext) // context.getExternalContext().getContext(); ServletContext servletContext = ServletActionContext .getServletContext(); String path = servletContext.getRealPath("\\ExcelFile"); String srcFilePath = path + "\\template\\" + templateFile; String destFilePath = path + "\\download\\" + filename; Map beanParams = new HashMap(); beanParams.put("results", datas); XLSTransformer transfer = new XLSTransformer(); transfer.transformXLS(srcFilePath, beanParams, destFilePath); // Browser.execClientScript("window.location.href='../ExcelFile/downloadfile.jsp?filename=" // + destFile + "';"); } catch (Exception e) { e.printStackTrace(); } } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } }
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值