先搞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了
原文:http://www.cnblogs.com/kangyanxiang/p/4757435.html