java导出Excel 总结
来源:互联网 发布:淘宝一件代发挣钱吗 编辑:程序博客网 时间:2024/05/17 02:50
首先下载 Apache 的POI jar包
将更目录下的poi-3.8-20120326.jar 和lib下的三个jar包导入 如下图:
首先必须搞一个通用的工具类,网上找的,能用就行,java就是这么高效率
ExcelUtil类:
1 package cn.xujingyang.util; 2 3 import java.lang.reflect.Method ; 4 import java.text.SimpleDateFormat ; 5 import java.util.Collection ; 6 import java.util.Date ; 7 import java.util.Iterator ; 8 import java.util.Map ; 9 import java.util.regex.Matcher ; 10 import java.util.regex.Pattern ; 11 import org.apache.poi.hssf.usermodel.HSSFCell ; 12 import org.apache.poi.hssf.usermodel.HSSFCellStyle ; 13 import org.apache.poi.hssf.usermodel.HSSFClientAnchor ; 14 import org.apache.poi.hssf.usermodel.HSSFFont ; 15 import org.apache.poi.hssf.usermodel.HSSFPatriarch ; 16 import org.apache.poi.hssf.usermodel.HSSFRichTextString ; 17 import org.apache.poi.hssf.usermodel.HSSFRow ; 18 import org.apache.poi.hssf.usermodel.HSSFSheet ; 19 import org.apache.poi.hssf.usermodel.HSSFWorkbook ; 20 import org.apache.poi.hssf.util.HSSFColor ; 21 22 public class ExcelUtil<T> { 23 /** 24 * 25 * @param title 26 * 表格标题名 27 * @param headers 28 * 表格属性列名数组 (第一行标题) 29 * @param Col 30 * 需要显示的表格属性列名数组 如果是javabean 必须和字段名字一直 如果为Map 必须为Map的key名字对应 31 * @param dataset 32 * 需要显示的数据集合,集合泛型支持两种,1:符合javabean风格的类的对象 2:Map类型。此方法支持的 33 * javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据) 34 * @param pattern 35 * 如果有时间数据,设定输出格式。默认为"yyy-MM-dd" 36 */ 37 public HSSFWorkbook exportExcel(String title, String[] headers,String[] Col,Collection<T> dataset, String pattern) { 38 if(pattern == null || pattern.equals("")) pattern = "yyy-MM-dd"; 39 // 声明一个工作薄 40 HSSFWorkbook workbook = new HSSFWorkbook(); 41 // 生成一个表格 42 HSSFSheet sheet = workbook.createSheet(title); 43 // 设置表格默认列宽度为15个字节 44 sheet.setDefaultColumnWidth(15); 45 // 生成一个样式 46 HSSFCellStyle style = workbook.createCellStyle(); 47 // 设置这些样式 48 style.setFillForegroundColor(HSSFColor.SKY_BLUE.index); 49 style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 50 style.setBorderBottom(HSSFCellStyle.BORDER_THIN); 51 style.setBorderLeft(HSSFCellStyle.BORDER_THIN); 52 style.setBorderRight(HSSFCellStyle.BORDER_THIN); 53 style.setBorderTop(HSSFCellStyle.BORDER_THIN); 54 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); 55 // 生成一个字体 56 HSSFFont font = workbook.createFont(); 57 font.setColor(HSSFColor.VIOLET.index); 58 font.setFontHeightInPoints((short) 12); 59 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); 60 // 把字体应用到当前的样式 61 style.setFont(font); 62 // 生成并设置另一个样式 63 HSSFCellStyle style2 = workbook.createCellStyle(); 64 style2.setFillForegroundColor(HSSFColor.WHITE.index); 65 style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); 66 style2.setBorderBottom(HSSFCellStyle.BORDER_THIN); 67 style2.setBorderLeft(HSSFCellStyle.BORDER_THIN); 68 style2.setBorderRight(HSSFCellStyle.BORDER_THIN); 69 style2.setBorderTop(HSSFCellStyle.BORDER_THIN); 70 style2.setAlignment(HSSFCellStyle.ALIGN_CENTER); 71 style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); 72 // 生成另一个字体 73 HSSFFont font2 = workbook.createFont(); 74 font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL); 75 // 把字体应用到当前的样式 76 style2.setFont(font2); 77 // 声明一个画图的顶级管理器 78 HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); 79 // 产生表格标题行 80 HSSFRow row = sheet.createRow(0); 81 int Cell = 0; 82 for (short i = 0; i < headers.length; i++) { 83 HSSFCell cell = row.createCell(Cell); 84 cell.setCellStyle(style); 85 HSSFRichTextString text = new HSSFRichTextString(headers[i]); 86 cell.setCellValue(text); 87 Cell ++ ; 88 } 89 // 遍历集合数据,产生数据行 90 Iterator<T> it = dataset.iterator(); 91 int index = 0; 92 while (it.hasNext()) { 93 index++; 94 row = sheet.createRow(index); 95 T t = (T) it.next(); 96 String[] fields = Col; 97 Cell = 0; 98 for (short i = 0; i < fields.length; i++) { 99 String fieldName = fields[i];100 HSSFCell cell = row.createCell(Cell);101 cell.setCellStyle(style2);102 try {103 Object value = "";104 Class tCls = null;105 Map map = null;106 if(t instanceof Map){107 map = (Map)t;108 value = map.get(fieldName);109 } else {110 String getMethodName = "get"111 + fieldName.substring(0, 1).toUpperCase()112 + fieldName.substring(1);113 tCls = t.getClass();114 Method getMethod = tCls.getMethod(getMethodName,new Class[] {});115 value = getMethod.invoke(t, new Object[] {});116 }117 if(value == null ) value = "";118 // 判断值的类型后进行强制类型转换119 String textValue = null;120 if (value instanceof Date) {121 Date date = (Date) value;122 SimpleDateFormat sdf = new SimpleDateFormat(pattern);123 textValue = sdf.format(date);124 } else if (value instanceof byte[]) {125 // 有图片时,设置行高为60px;126 row.setHeightInPoints(60);127 // 设置图片所在列宽度为80px,注意这里单位的一个换算128 sheet.setColumnWidth(Cell, (short) (35.7 * 80));129 // sheet.autoSizeColumn(i);130 byte[] bsValue = (byte[]) value;131 HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,132 1023, 255, (short) 6, index, (short) 6, index);133 anchor.setAnchorType(2);134 patriarch.createPicture(anchor, workbook.addPicture(135 bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));136 } else {137 // 其它数据类型都当作字符串简单处理138 textValue = value.toString();139 }140 // 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成141 if (textValue != null) {142 Pattern p = Pattern.compile("^//d+(//.//d+)?$");143 Matcher matcher = p.matcher(textValue);144 if (matcher.matches()) {145 // 是数字当作double处理146 cell.setCellValue(Double.parseDouble(textValue));147 } else {148 HSSFRichTextString richString = new HSSFRichTextString(149 textValue);150 HSSFFont font3 = workbook.createFont();151 font3.setColor(HSSFColor.BLUE.index);152 richString.applyFont(font3);153 cell.setCellValue(richString);154 }155 }156 Cell ++ ;157 } catch (Exception e) {158 e.printStackTrace();159 }160 }161 }162 return workbook;163 }164 }
测试例子:
1 ..... 2 3 String [] headers = null ; 4 String [] Col = null ; 5 List excelList = null ; 6 ExcelUtil<LoginlogNumVO> ex = new ExcelUtil<LoginlogNumVO>() ; 7 18 // 表头19 headers = new String [] { "操作日期","用户编码", "用户名称", "IP地址","端口号","登录状态","进入模块","登录入口" } ;20 // 数据键名或者MODEL类字段名21 Col = new String [] { "date","u_code", "u_name", "ip","port","satus","module","enter" } ;22 23 // 这是model类型的数据 写的例子 暂时不添加数据24 excelList = loginLogService.getListByPage(0, loginLogService25 .getRowCount(key, keywords, dateStart, dateEnd, enter), key,26 keywords, dateStart, dateEnd, enter) ;27 28 29 // 生成Excel30 HSSFWorkbook workbook = ex.exportExcel("sheet1", headers, Col, excelList, null) ;31 // 下载32 response.setContentType("application/vnd.ms-excel;charset=UTF-8") ;33 response.setHeader("Content-disposition",34 "attachment;filename=" + System.currentTimeMillis() + "_login_log_sheet.xls") ;35 OutputStream ouputStream ;36 try {37 ouputStream = response.getOutputStream() ;38 workbook.write(ouputStream) ;39 ouputStream.flush() ;40 ouputStream.close() ;41 } catch (IOException e) {42 e.printStackTrace() ;43 }44 45 .....
挺简单~~~
阅读全文
0 0
- java导出Excel 总结
- java利用POI导出EXCEL总结
- java中使用jxl导出excel总结
- java使用jxl导出excel使用总结
- java 项目利用POI导出excel总结
- C#导出Excel总结
- C#导出Excel总结
- C#导出Excel总结
- gridview 导出excel 总结
- C# 导出Excel总结
- excel导出总结
- C#导出Excel总结
- gridview 导出excel 总结
- C#导出Excel总结
- gridview 导出excel 总结
- C#导出Excel总结
- Web导出Excel总结
- C#导出Excel总结
- TCP握手和挥手
- 框架之 hibernate之关联关系映射
- 框架之 hibernate之各种查询
- 全源码教你一键锁屏
- 框架之Struts2简单入门
- java导出Excel 总结
- hibernate 关联关系 详解
- 六种获取配置properties文件的方法
- Linux 安装mysql后修改密码策略
- mybatis+spring 方式一
- GSON 报错HibernateProxy. Forgot to register a type adapter? 的解决办法
- Oracle12c DataGuard 物理备库的简单配置
- 【caffe】windows下vs2013+opencv3.2.0+opencv_contrib(包含dnn)+cmake3.8编译与配置
- structs2----数据封装以及拦截器