下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
先创建导出Excel的工具类,并带泛型,实体一定要生成属性的get方法,就是普通的Javabean,后面的就是个人发挥了,废话不多说,直接上代码:
public class ExportExcel<T> { public void exportExcel(Collection<T> dataset,OutputStream out) { exportExcel("数据导出",null,dataset,out,"yyyy-MM-dd hh:MM:ss"); } public void exportExcel(String[] headers,Collection<T> dataset,headers,OutputStream out,String pattern) { exportExcel("数据导出",pattern); } public void exportExcel(String title,String[] headers,String pattern) { // 声明一个工作薄 hssfWorkbook workbook = new hssfWorkbook(); // 生成一个表格 hssfSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为30个字节 sheet.setDefaultColumnWidth(30); // 生成一个样式 hssfCellStyle style = workbook.createCellStyle(); // 设置这些样式 style.setFillForegroundColor(hssfColor.WHITE.index); style.setFillPattern(hssfCellStyle.soLID_FOREGROUND); style.setBorderBottom(hssfCellStyle.BORDER_THIN); style.setBorderLeft(hssfCellStyle.BORDER_THIN); style.setBorderRight(hssfCellStyle.BORDER_THIN); style.setBorderTop(hssfCellStyle.BORDER_THIN); style.setAlignment(hssfCellStyle.ALIGN_CENTER); // 标题字体 hssfFont font = workbook.createFont(); font.setColor(hssfColor.BLACK.index); font.setFontHeightInPoints((short) 12); font.setBoldweight(hssfFont.BOLDWEIGHT_BOLD); // 把字体应用到当前的样式 style.setFont(font); // 生成并设置另一个样式 hssfCellStyle style2 = workbook.createCellStyle(); style2.setFillForegroundColor(hssfColor.WHITE.index); style2.setFillPattern(hssfCellStyle.soLID_FOREGROUND); style2.setBorderBottom(hssfCellStyle.BORDER_THIN); style2.setBorderLeft(hssfCellStyle.BORDER_THIN); style2.setBorderRight(hssfCellStyle.BORDER_THIN); style2.setBorderTop(hssfCellStyle.BORDER_THIN); style2.setAlignment(hssfCellStyle.ALIGN_CENTER); style2.setVerticalAlignment(hssfCellStyle.VERTICAL_CENTER); // 内容字体 hssfFont font2 = workbook.createFont(); font2.setColor(hssfColor.BLACK.index); font2.setBoldweight(hssfFont.BOLDWEIGHT_norMAL); // 把字体应用到当前的样式 style2.setFont(font2); // 声明一个画图的顶级管理器 hssfPatriarch patriarch = sheet.createDrawingPatriarch(); // 定义注释的大小和位置,详见文档 hssfComment comment = patriarch.createComment(new hssfClientAnchor(0,(short) 4,2,(short) 6,5)); // 设置注释内容 comment.setString(new hssfRichTextString("注释!")); // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容. comment.setAuthor("yuyidi"); //产生表格标题行 hssfRow row = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { hssfCell cell = row.createCell(i); cell.setCellStyle(style); hssfRichTextString text = new hssfRichTextString(headers[i]); cell.setCellValue(text); } //遍历集合数据,产生数据行 Iterator<T> it = dataset.iterator(); int index = 0; while (it.hasNext()) { index++; row = sheet.createRow(index); T t = (T) it.next(); //利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值 Field[] fields = t.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { hssfCell cell = row.createCell(i); cell.setCellStyle(style2); Field field = fields[i]; String fieldName = field.getName(); String getmethodName = "get" + fieldName.substring(0,1).toupperCase() + fieldName.substring(1); try { Class tCls = t.getClass(); Method getmethod = tCls.getmethod(getmethodName,new Class[] {}); Object value = getmethod.invoke(t,new Object[] {}); //判断值的类型后进行强制类型转换 String textValue = null; if (value instanceof Date) { Date date = (Date) value; SimpleDateFormat sdf = new SimpleDateFormat(pattern); textValue = sdf.format(date); }else if (value instanceof Double) { textValue = formatter.format(value); } else if (value instanceof byte[]) { // 有图片时,设置行高为60px; row.setHeightInPoints(60); // 设置图片所在列宽度为80px,注意这里单位的一个换算 sheet.setColumnWidth(i,(short) (35.7 * 80)); // sheet.autoSizeColumn(i); byte[] bsValue = (byte[]) value; hssfClientAnchor anchor = new hssfClientAnchor(0,1023,255,index,index); anchor.setAnchorType(2); patriarch.createPicture(anchor,workbook.addPicture( bsValue,hssfWorkbook.PICTURE_TYPE_JPEG)); } else{ //其它数据类型都当作字符串简单处理 textValue = objToString(value); } //如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成 if(textValue!=null){ Pattern p = Pattern.compile("^//d+(//.//d+)?$"); Matcher matcher = p.matcher(textValue); if(matcher.matches()){ //是数字当作double处理 cell.setCellValue(Double.parseDouble(textValue)); }else{ hssfRichTextString richString = new hssfRichTextString(textValue); cell.setCellValue(richString); } } } catch (SecurityException e) { e.printstacktrace(); } catch (NoSuchMethodException e) { e.printstacktrace(); } catch (IllegalArgumentException e) { e.printstacktrace(); } catch (illegalaccessexception e) { e.printstacktrace(); } catch (InvocationTargetException e) { e.printstacktrace(); } finally { //清理资源 } } } try { workbook.write(out); } catch (IOException e) { e.printstacktrace(); } } private String objToString(Object obj){ return (obj == null) ? "" : obj.toString(); } }
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。