Excel导出
前端(GET方式),如果参数有null,后端接收到的不是null而是字符串“null”,可能导致SQL逻辑错误,可以再控制层或者服务处处理一下
window.location.href =request.baseURL+ "/IntentListExport?isExpand="+this.selectCondition.isExpand+ "&botName="+this.currentBotName+ "&intent="+this.selectCondition.intent
controller
@GetMapping("/IntentListExport") public void IntentListExport(Entity entity, HttpServletResponse response) throws IOException {
ExcelWriter writer=botExerciseSampleService.export(botExerciseSampleSelectCondition);
//out为OutputStream,需要写出到的目标流
response.setContentType("application/vnd.ms-excel;charset=utf-8");
Date date=new Date();
DateFormat format=new SimpleDateFormat("yyyyMMdd");
String fileName = "CheckBot_Release_Sample_"+botExerciseSampleSelectCondition.getBotName()+"_"+format.format(date)+"-"+ DateUtil.currentSeconds() + ".xls";
//CheckBot_Release_Auto Test_20210518-124009
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
ServletOutputStream out = response.getOutputStream();
writer.flush(out, true);
// 关闭writer,释放内存
writer.close();
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
业务实现
public ExcelWriter export(BotExerciseSampleSelectCondition botExerciseSampleSelectCondition){ ExcelWriter writer = ExcelUtil.getWriter(); List<BotExerciseSample> result=botExerciseSampleMapper.findByCondition(botExerciseSampleSelectCondition); if (result.size()>65535){ List<List<BotExerciseSample>> lists= ListUtils.partition(result,65535); for (int i=0;i<lists.size();i++){ //设置表头 setDataSheet(writer,lists.get(i),i,botExerciseSampleSelectCondition.getBotName()); } }else { setDataSheet(writer,result,0,botExerciseSampleSelectCondition.getBotName()); } return writer; } private void setDataSheet(ExcelWriter writer,List<BotExerciseSample> result,int index,String name){ if (index==0){ writer.renameSheet(name); }else { writer.setSheet(name+index); } writer.addHeaderAlias("bot_chname", "bot名称"); writer.addHeaderAlias("intent", "意图"); writer.addHeaderAlias("question", "问题"); writer.addHeaderAlias("answer_text","文本回答"); writer.addHeaderAlias("answer_picture_name", "图片回答"); writer.addHeaderAlias("answer_link", "链接回答"); writer.write(result, true); }