java根据模板导出excel(二)

       最近在做一个项目,关于excel的导出问题,上网查了很多,最后自己整理并编写了关于模板导出的方法,可能会有一些局限性,但是对于简单的模板导出功能是可以实现的,先留下笔记,以供日后参考!思路其实很简单,主要分为:(1)读取模板excel(2)循环模板excel的每一行,将对应的标签替换成对应的数值

第一,模板如下:

导出后如下图所示:

第二,直接上代码吧

1.控制层(controller层)中主要是模板的路径问题,需要特别注意下!模板的位置如图:

具体的代码如下:

/**
* 列表导出逻辑
* @Title: excelExp 
* @param voiceLandingBaseinfo
* @param request
* @param response
* @param model    设定文件 
* @return void    返回类型 
* @author duyp 
* @date 2018年8月24日 下午2:55:23 
*
*/
@RequestMapping(value = {"excelExp"})
public void excelExp(MsgCbmSpecialprovisions msgCbmSpecialprovisions,MsgCbmBaseinfo msgCbmBaseinfo, HttpServletRequest request,
HttpServletResponse response, Model model) {
	try {
		// 查询满足条件的业务建档信息
		String id=request.getParameter("id");
		msgCbmSpecialprovisions.setRefid(id);
		Map<String, String> map = msgCbmSpecialprovisionsService.getExpList(msgCbmSpecialprovisions,msgCbmBaseinfo);
		response.setContentType("application/OCTET-STREAM");
		String filename = CommonUtil.encodeChineseDownloadFileName(request, Constants.EXP_EXCEL_NAME10);
		response.setHeader("Content-Disposition", "attachment;filename=" + filename);
		OutputStream out = response.getOutputStream();
		String excelModelPath =request.getSession().getServletContext().getRealPath("")+ "/excelmodel/msgCbmSpecialprovisions.xls"; //这个是我的excel模板 
		ExcelUtilAddByDu.replaceModelNew(excelModelPath, 0, map, out);
	} catch (IOException e) {
		e.printStackTrace();
	}
}

2,服务层(service层)代码

/**
*导出信息组装 
* @Title: getExpList 
* @param msgCbmSpecialprovisions
* @return    设定文件 
* @return Map<String,String>    返回类型 
* @author duyp 
* @date 2018年10月18日 下午2:55:58 
*
*/
public Map<String, String> getExpList(MsgCbmSpecialprovisions msgCbmSpecialprovisions,MsgCbmBaseinfo msgCbmBaseinfo){
	//查找需要导出的信息
	MsgCbmSpecialprovisions objEntity=findListByRefid(msgCbmSpecialprovisions);
	Map<String, String> mapc = new HashMap<String, String>();
	if(!ObjectUtils.isNullOrEmpty(objEntity)){
		mapc.put("date",DateUtils.getDate("yyyy-MM-dd"));
		mapc.put("sales",msgCbmBaseinfo.getSales());
		mapc.put("customservice",msgCbmBa
根据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; } }
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值