文章目录
- 前言
- 一、制作模板
- 二、前端代码
- 三、后端代码
- 总结
前言
导出excel功能非常场景,本片文章记录如何使用模板填充数据后再导出。因直接导出excel数据样式不符合要求,所以做了模板填充然后再导出excel。
效果如下:
一、制作模板
注意:列表数据变量名前面要写点{.id},如果单条数据可以不写。
二、前端代码
使用表单提交:
<% layout('/layouts/default.html', {title: '导出信用用户', libs: ['validate','fileupload']}){ %>
<style type="text/css">.delete {display: none;}
</style>
<div class="main-content"><div class="box box-main"><div class="box-header with-border"><div class="box-tools pull-right"><button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i></button></div></div><#form:form id="inputForm" model="${cshopUser}" action="${ctx}/shop/user/cshopUser/download" method="post" class="form-horizontal"><div class="box-body"><div class="row"><div class="col-xs-12"><div class="form-group"><label class="control-label col-sm-2"><span class="required">*</span>${text('请选择村庄')}:</label><div class="col-sm-10"><#form:treeselect id="office" title="乡镇/村庄选择"path="office.officeCode" labelPath="office.officeName"url="${ctx}/sys/office/treeData"class="required" allowClear="true"/></div></div></div></div><div class="box-footer"><div class="row"><div class=" text-center"><button type="submit" class="btn btn-sm btn-primary" id="btnSubmit">${text('导出用户')}</button> <button type="button" class="btn btn-sm btn-default" id="btnCancel" onclick="js.closeCurrentTabPage()"><i class="fa fa-reply-all"></i> ${text('关 闭')}</button></div></div></div></#form:form></div>
</div>
<% } %>
<script>
$("#inputForm").validate({submitHandler: function(form){js.ajaxSubmitForm($('#inputForm'), {url:'${ctx}/shop/user/cshopUser/daochu',downloadFile:true});}
});
</script>
三、后端代码
实体代码:
@Data
public class BianGengExcel {@ExcelProperty(value = "ID")private String id;@ExcelProperty(value = "姓名")private String name;@ExcelProperty(value = "手机号")private String phone;}
controller代码:
/*** 导出用户** @param cshopUser* @return*/@PostMapping(value = "daochu")public String daochu(@Validated CshopUser cshopUser,HttpServletResponse response) {List <BianGengExcel> data = cshopUserService.daochu(cshopUser);try {OutputStream out = response.getOutputStream();//文件名需要这样写,不能在setHeader直接写中文名,否则下载的文件名字为空,只有后缀response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");String fileName = URLEncoder.encode("用户-"+System.currentTimeMillis(), "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");String templateFileName = this.getClass().getResource("/static/moban/daochu_moban.xls").getPath();ExcelWriter excelWriter = EasyExcelFactory.write(out,BianGengExcel.class).withTemplate(templateFileName).build();
// ExcelWriter excelWriter = EasyExcel.write(out).withTemplate(templateFileName).build();WriteSheet writeSheet = EasyExcel.writerSheet().build();FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.FALSE).build();excelWriter.fill(data,fillConfig,writeSheet);excelWriter.finish();out.flush();out.close();} catch (IOException e) {e.printStackTrace();}return renderResult(Global.TRUE, text("导出用户成功!"));}
总结
只对jeesite感兴趣可以订阅jeesite专栏。更多实战经验,请关注实战专栏,实战专栏包含了所有jeesite专栏文章。