导出Excel工具类
2015-12-31 16:53
387 查看
一般导出excel需要在后端封装好HSSFWorkbook对象,直接就可以下载,而且在controller层一般是用get方式请求。现在我们先把ExcelUtil的工具类贴出来,然后在贴出来一个controller的代码来引导controller的编写 ,大家关心的导包可以看上面的导包情况,其中最后一个是maven模组化的父模块
下面是控制层怎么编写访问路径,我这边使用的是springmvc。
package com.mavenspring.demo.util; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.util.CellRangeAddress; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.IndexedColors; import com.mavenspring.demo.model.ProjectUser; /** * * @date 2015年10月10日 下午2:31:56 */ @SuppressWarnings("deprecation") public class ExcelUtil { /** * 生成中奖纪录Excel * * @param list * @return */ public static HSSFWorkbook drawExcelReport(List<ProjectUser> list) { // 第一步,创建一个webbook,对应一个Excel文件 HSSFWorkbook wb = new HSSFWorkbook(); // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet HSSFSheet sheet = wb.createSheet("项目用户数据"); // 创建标题单元格样式 HSSFCellStyle headStyle = wb.createCellStyle(); headStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中 headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平居中 headStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex()); // 背景色 headStyle.setFillPattern(CellStyle.SOLID_FOREGROUND); headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框 headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框 headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框 headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框 // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short HSSFRow rowTilte = sheet.createRow((short) 0); // 设置行高500 rowTilte.setHeight((short) 500); // 合并单元格,参数依次为起始行,结束行,起始列,结束列 sheet.addMergedRegion(new CellRangeAddress(0, (short) 0, 0, (short) 4)); // 创建第一行的第一个单元格 HSSFCell ce = rowTilte.createCell(0); ce.setCellValue("项目用户数据"); // 表格的第一行第一列显示的数据 ce.setCellStyle(headStyle); // 样式,居中 // 设置列的标题 HSSFRow rowHead = sheet.createRow((int) 1); String[] excelHeader = { "姓名", "用户名", "密码", "年龄", "用户头像","住址" }; for (int i = 0; i < excelHeader.length; i++) { HSSFCell cell = rowHead.createCell(i); cell.setCellValue(excelHeader[i]); cell.setCellStyle(headStyle); sheet.setColumnWidth(i, 20 * 256); } HSSFRow row = null; ProjectUser record = null; for (int i = 1; i <= list.size(); i++) { row = sheet.createRow(i + 1);// 从第二行开始写入数据 record = list.get(i - 1); row.createCell(0).setCellValue(record.getName()); // 姓名 row.createCell(1).setCellValue(record.getUserName()); // 用户名 if (record.getPassword() != null) { row.createCell(2).setCellValue(record.getPassword());// 密码 } if (record.getAge() != null) { row.createCell(3).setCellValue(record.getAge()); //年龄 } row.createCell(4).setCellValue(record.getPersonImgUrl()); // 用户头像 row.createCell(5).setCellValue(record.getAddress()); //住址 } return wb; } }
下面是控制层怎么编写访问路径,我这边使用的是springmvc。
package com.mavenspring.project.controller; import java.io.IOException; import java.io.OutputStream; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import com.mavenspring.demo.model.ProjectUser; import com.mavenspring.demo.model.req.ProjectUserReq; import com.mavenspring.demo.util.ExcelUtil; import com.mavenspring.project.service.ProjectUserService; /** * * @version 创建时间:2015年12月10日 下午2:12:07 * 类说明 */ @Controller public class ProjectUserController { private static Logger log = LoggerFactory.getLogger(ProjectUserController.class); @Autowired private ProjectUserService projectUserService; @ResponseBody @RequestMapping(value="/user/list",method=RequestMethod.POST) public List<ProjectUser> getAllProjectUser(@RequestBody ProjectUserReq req){ return projectUserService.getAllProjectUser(req); } @ResponseBody @RequestMapping(value="/user/insert",method=RequestMethod.POST) public int insertProjectUser(ProjectUser projectUser){ return projectUserService.insertProjectUser(projectUser); } @RequestMapping(value="/user/downuserexcel") public void downLoadProjectExcel(@RequestBody ProjectUserReq req,HttpServletRequest request,HttpServletResponse response){ String fileNameStr = "abc"; try { String downloadFileName = new String( fileNameStr.getBytes("gb2312"), "iso8859-1"); req.setPageSize(0);// 不需要分页 List<ProjectUser> list = projectUserService.getAllProjectUser(req); HSSFWorkbook wb = ExcelUtil.drawExcelReport(list); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=" + downloadFileName); OutputStream ouputStream; ouputStream = response.getOutputStream(); wb.write(ouputStream); ouputStream.flush(); ouputStream.close(); } catch (IOException e) { log.error("导出办卡进度数据失败!", e.getMessage()); } } }
相关文章推荐
- C#、ASP.NET通用扩展工具类之TypeParse
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
- Android封装的http请求实用工具类
- Android开发中4个常用的工具类【Toast、SharedPreferences、网络及屏幕操作】
- Android AES加密工具类分享
- 超实用的android网络工具类
- Android 数据存储之 FileInputStream 工具类及FileInputStream类的使用
- Android开发之MediaPlayer多媒体(音频,视频)播放工具类
- Android开发之超强图片工具类BitmapUtil完整实例
- Android开发实现的IntentUtil跳转多功能工具类【包含视频、音频、图片、摄像头等操作功能】
- 19个Android常用工具类汇总
- Android开发之多媒体文件获取工具类实例【音频,视频,图片等】
- ASP.NET简单好用功能齐全图片上传工具类(水印、缩略图、裁剪等)
- 分享一个安卓的内置多种工具类的Activity
- java Mail邮件接收工具类
- Java中StringUtils工具类的一些用法实例
- java中常用工具类之字符串操作类和MD5加密解密类
- java实现图片裁切的工具类实例
- android开发个人总结