最近在做一个项目,关于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