先搞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了

 

posted on 2015-08-25 14:51  Bonnat  阅读(163)  评论(0编辑  收藏  举报