Java Web的Excel导出处理(基于POI)
2016-08-08 14:38
501 查看
1、概述
开发工具:IntelliJ IDEA 13.0.2
开发框架:maven、SpringMVC
2、导入jar包
3、引入工具类(网上一搜一堆,这里面对Excel的各种配置都一一列举)
4、导出方法
此处共传递了3个参数,第一个参数是指定数据源的,第二个参数指定你要显示的Excel第一行title,第三个参数指定一个输出流,用于对Excel文件的输出,当然对于数据源及title的类型可以定义其他类型,此处仅是一个比方。
5、调用导出Excel方法
此处仅仅是一个例子,输出Excel的格式多种多样,稍加改造即可。如果直接copy代码可能会出现找不到变量的异常,可自己重新定义。
开发工具:IntelliJ IDEA 13.0.2
开发框架:maven、SpringMVC
2、导入jar包
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency>
3、引入工具类(网上一搜一堆,这里面对Excel的各种配置都一一列举)
package com.study.base.common.util; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.*; /** * Excel工具类 */ public class ExportUtil { private XSSFWorkbook wb = null; private XSSFSheet sheet = null; /** * @param wb * @param sheet */ public ExportUtil(XSSFWorkbook wb, XSSFSheet sheet) { this.wb = wb; this.sheet = sheet; } /** * 合并单元格后给合并后的单元格加边框 * * @param region * @param cs */ public void setRegionStyle(CellRangeAddress region, XSSFCellStyle cs) { int topRowNum = region.getFirstRow(); for (int i = topRowNum; i <= region.getLastRow(); i++) { XSSFRow row = sheet.getRow(i); for (int j = region.getFirstColumn(); j <= region.getLastColumn(); j++) { XSSFCell cell = row.getCell(j); cell.setCellStyle(cs); } } } /** * 设置表头的单元格样式 * * @return */ public XSSFCellStyle getHeadStyle() { // 创建单元格样式 XSSFCellStyle cellStyle = wb.createCellStyle(); // 设置单元格的背景颜色为淡蓝色 cellStyle.setFillForegroundColor(HSSFColor.PALE_BLUE.index); cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); // 设置单元格居中对齐 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 设置单元格垂直居中对齐 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 创建单元格内容显示不下时自动换行 cellStyle.setWrapText(true); // 设置单元格字体样式 XSSFFont font = wb.createFont(); // 设置字体加粗 font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); font.setFontName("宋体"); font.setFontHeight((short) 200); cellStyle.setFont(font); // 设置单元格边框为细线条 cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); return cellStyle; } /** * 设置表体的单元格样式 * * @return */ public XSSFCellStyle getBodyStyle() { // 创建单元格样式 XSSFCellStyle cellStyle = wb.createCellStyle(); // 设置单元格居中对齐 cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 设置单元格垂直居中对齐 cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER); // 创建单元格内容显示不下时自动换行 cellStyle.setWrapText(true); // 设置单元格字体样式 XSSFFont font = wb.createFont(); // 设置字体加粗 font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); font.setFontName("宋体"); font.setFontHeight((short) 200); cellStyle.setFont(font); // 设置单元格边框为细线条 cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN); cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN); return cellStyle; } }
4、导出方法
此处共传递了3个参数,第一个参数是指定数据源的,第二个参数指定你要显示的Excel第一行title,第三个参数指定一个输出流,用于对Excel文件的输出,当然对于数据源及title的类型可以定义其他类型,此处仅是一个比方。
/** * 导出Excel方法 * @param list 数据源 * @param titles 第一行标题 * @param outputStream 输出流 * @throws java.io.IOException IO异常 */ public void exportExcelNoModel(List<Object[]> list, String[] titles, ServletOutputStream outputStream) throws IOException { try{ // 创建一个workbook 对应一个excel应用文件 XSSFWorkbook workBook = new XSSFWorkbook(); // 在workbook中添加一个sheet,对应Excel文件中的sheet XSSFSheet sheet = workBook.createSheet(Constants.MENU_MANAGER); ExportUtil exportUtil = new ExportUtil(workBook, sheet); XSSFCellStyle headStyle = exportUtil.getHeadStyle(); XSSFCellStyle bodyStyle = exportUtil.getBodyStyle(); // 构建表头 XSSFRow headRow = sheet.createRow(0); XSSFCell cell = null; for (int i = 0; i < titles.length; i++){ cell = headRow.createCell(i); cell.setCellStyle(headStyle); cell.setCellValue(titles[i]); } // 构建表体数据 if (list != null && list.size() > 0){ for (int j = 0; j < list.size(); j++){ XSSFRow bodyRow = sheet.createRow(j + 1); for(int k = 0; k< list.get(j).length; k++){ cell = bodyRow.createCell(k); cell.setCellStyle(bodyStyle); if(null != list.get(j)[k]){ cell.setCellValue(list.get(j)[k].toString()); }else{ cell.setCellValue(""); } } } } workBook.write(outputStream); outputStream.flush(); }catch(IOException e){ log.error(e); }finally { if(outputStream != null){ try { outputStream.close(); } catch (IOException e) { log.error(e); } } } }
5、调用导出Excel方法
/** * 导出Excel方法 * @param request * @param response * @return * @throws IOException */ @Override public String exportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { //设置Response头信息 response.setCharacterEncoding(Constants.UTF8); response.setContentType(Constants.CONTENT_TYPE); ServletOutputStream outputStream = response.getOutputStream(); String fileName = new String(Constants.MENU_MANAGER.getBytes(Constants.GB2312), Constants.ISO8859); // 组装附件名称和格式 response.setHeader( Constants.CONTENT_DISPOSITION, Constants.ATTACHMENT + fileName + ".xlsx"); String[] titles = { "菜单名称", "提交方式", "打开方式","创建者"}; exportExcel.exportExcelNoModel(sysMenuDao.exportExcel( outputStream), titles, outputStream);//调用后台方法 return Constants.SUCCESS; }
此处仅仅是一个例子,输出Excel的格式多种多样,稍加改造即可。如果直接copy代码可能会出现找不到变量的异常,可自己重新定义。
相关文章推荐
- 通过Spring Mail Api发送邮件
- JAVA实现截屏
- java正则表达式 非捕获组详解
- Spring-MVC开发之全局异常捕获全面解读(转载)
- Thrift设置超时等信息(Java)
- java双向链表
- java类和对象的初始化
- java 比较两个日期之间的大小
- Java技术——Java中创建对象的5种方式
- Java技术——Java中创建对象的5种方式
- Java设计模式之原型模式与深浅拷贝
- Java基础之(十七)继承和组合
- Spring MVC 属性文件读取注入到静态字段
- eclipse导入android项目后R文件始终产生不了的问题
- java中代码块和构造器的运行机制
- Struts2(一)——总体介绍
- Spring AOP 实现写事件日志功能
- Java的回调机制
- java synchronized关键字
- Eclipse和Studio去除头部标题