先搞jar包吧,参考上一篇文章。上一篇文章没写SpringMVC上传下载需要的jar包,现在给列出来吧
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency>
<!-- 上传下载操作 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8" /> <property name="maxUploadSize" value="10485760000" /> <property name="maxInMemorySize" value="40960" /> </bean>
这个配置文件
好了,言归正传,看导出文件吧。
@RequestMapping(value = "/exportfile") public void exportFile(HttpServletResponse response,String startDate, String endDate, String keywords, Integer pageNo) throws WriteException, IOException{ startDate = StringUtils.isNotBlank(startDate) ? startDate + " 00:00:00 " : null; endDate = StringUtils.isNotBlank(endDate) ? endDate + " 23:59:59 " : null; keywords = StringUtils.isNotBlank(keywords) ? keywords : null;
这里是从前台接收到的数据,开始时间,结束时间,还有一个查询关键字。
pageNo = 1; //从第一页开始 int title = 0; User user = null; WritableWorkbook book = null; UserLoginHistory userLoginHistory = null;
int sheetSize = Integer.valueOf(SysConfigUtil.getParamValue("sheet.show.size")).intValue();//每页数量--工作表每页数量(从数据库中查出来每个工作表要显示多少条数据)
数据量还是比较大的,所以用的分页查询,先把数据查出来一页一页往Excel表格中插入。
//调用接口获取用户数据 Page userloginhistoryPageCount = CenterClient.getUserLoginHistoryList(startDate, endDate, keywords, pageNo, sheetSize); int totalPage = userloginhistoryPageCount.getTotalPage();//总页数 String path = request.getServletContext().getRealPath("file/temp"); book = Workbook.createWorkbook(new File(path+"/userExportExcel.xls"));
第一次调用接口获取数据,获取总页数
do{ Page userloginhistoryPage = CenterClient.getUserLoginHistoryList(startDate, endDate, keywords, pageNo, sheetSize); List<UserLoginHistory> pserLoginHistoryList = userloginhistoryPage.getRecords(); WritableSheet sheet = book.createSheet("awifi-"+pageNo, pageNo);//创建工作表 //设置每列表格宽度(20) sheet.setColumnView(0, 20); sheet.setColumnView(1, 20); sheet.setColumnView(2, 20); sheet.setColumnView(3, 20); sheet.setColumnView(4, 20); sheet.setColumnView(5, 20); //title样式 WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED); WritableCellFormat titleFormat = new WritableCellFormat (titleFont); titleFormat.setAlignment(jxl.format.Alignment.CENTRE); //文本样式 WritableCellFormat textFormat = new WritableCellFormat(); textFormat.setAlignment(jxl.format.Alignment.CENTRE); sheet.addCell(new Label(0, 0, "真实姓名",titleFormat)); sheet.addCell(new Label(1, 0, "手机号",titleFormat)); sheet.addCell(new Label(2, 0, "MAC地址",titleFormat)); sheet.addCell(new Label(3, 0, "最新登录时间",titleFormat)); sheet.addCell(new Label(4, 0, "用户标识",titleFormat)); sheet.addCell(new Label(5, 0, "登录次数",titleFormat)); for (int i = 0; i < pserLoginHistoryList.size();i++) { int j=0; userLoginHistory = pserLoginHistoryList.get(i); user = userLoginHistory.getUser(); String phone = userLoginHistory.getCellphone(); phone=phone.substring(0,3)+"****"+phone.substring(7);//手机号不让公开,就隐藏掉了 sheet.addCell(new Label(j++,title+1,user != null ? user.getRealName() : Constants.NULL_STR,textFormat));//真实姓名 sheet.addCell(new Label(j++,title+1,phone,textFormat));//手机号 sheet.addCell(new Label(j++,title+1,userLoginHistory.getMac(),textFormat)); //MAC地址 sheet.addCell(new Label(j++,title+1,userLoginHistory.getLoginDate(),textFormat)); //最新登录时间 sheet.addCell(new Label(j++,title+1,user != null ? user.getUserTypeDsp() : "访客",textFormat));//用户标识 sheet.addCell(new Label(j++,title+1,Integer.toString(userLoginHistory.getLoginCount()),textFormat));//登录次数 title++; } title=0; pageNo++; }while(pageNo <= totalPage);
然后第二次调用接口,就开始获取数据 do while循环插入到表格中
book.write(); book.close(); IOUtil.download("userExportExcel.xls",path,response);
最后一定要关闭资源,在调用下载方法就OK了