• java excel导出


      1 /**
      2  * 利用开源组件POI3.10动态导出EXCEL文档
      3  * 
      4  * @author leno
      5  * @version v1.0
      6  * @param <T>
      7  *            应用泛型,代表任意一个符合javabean风格的类
      8  *            注意这里为了简单起见,boolean型的属性xxx的get器方式为getXxx(),而不是isXxx()
      9  *            byte[]表jpg格式的图片数据
     10  */
     11 public class ExportExcel<T> {
     12     public void exportExcel(Collection<T> dataset, OutputStream out) {
     13         exportExcel("测试POI导出EXCEL文档", null, dataset, out, "yyyy-MM-dd");
     14     }
     15 
     16     public void exportExcel(String[] headers, Collection<T> dataset,
     17             OutputStream out) {
     18         exportExcel("测试POI导出EXCEL文档", headers, dataset, out, "yyyy-MM-dd");
     19     }
     20 
     21     public void exportExcel(String[] headers, Collection<T> dataset,
     22             OutputStream out, String pattern) {
     23         exportExcel("测试POI导出EXCEL文档", headers, dataset, out, pattern);
     24     }
     25 
     26     /**
     27      * 这是一个通用的方法,利用了JAVA的反射机制,可以将放置在JAVA集合中并且符合一定条件的数据以EXCEL 的形式输出到指定IO设备上
     28      * 
     29      * @param title
     30      *            表格标题名
     31      * @param headers
     32      *            表格属性列名数组
     33      * @param dataset
     34      *            需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。此方法支持的
     35      *            javabean属性的数据类型有基本数据类型及String,Date,byte[](图片数据)
     36      * @param out
     37      *            与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
     38      * @param pattern
     39      *            如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
     40      */
     41     @SuppressWarnings("unchecked")
     42     public void exportExcel(String title, String[] headers,
     43             Collection<T> dataset, OutputStream out, String pattern) {
     44         // 声明一个工作薄
     45         HSSFWorkbook workbook = new HSSFWorkbook();
     46         // 生成一个表格
     47         HSSFSheet sheet = workbook.createSheet(title);
     48         // 设置表格默认列宽度为15个字节
     49         sheet.setDefaultColumnWidth((short) 15);
     50         // 生成一个样式
     51         HSSFCellStyle style = workbook.createCellStyle();
     52         // 设置这些样式
     53         style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
     54         style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
     55         style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
     56         style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
     57         style.setBorderRight(HSSFCellStyle.BORDER_THIN);
     58         style.setBorderTop(HSSFCellStyle.BORDER_THIN);
     59         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
     60         // 生成一个字体
     61         HSSFFont font = workbook.createFont();
     62         font.setColor(HSSFColor.VIOLET.index);
     63         font.setFontHeightInPoints((short) 12);
     64         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
     65         // 把字体应用到当前的样式
     66         style.setFont(font);
     67         // 生成并设置另一个样式
     68         HSSFCellStyle style2 = workbook.createCellStyle();
     69         style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
     70         style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
     71         style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
     72         style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
     73         style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
     74         style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
     75         style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
     76         style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
     77         // 生成另一个字体
     78         HSSFFont font2 = workbook.createFont();
     79         font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
     80         // 把字体应用到当前的样式
     81         style2.setFont(font2);
     82 
     83         // 声明一个画图的顶级管理器
     84         HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
     85         // 定义注释的大小和位置,详见文档
     86         HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0,
     87                 0, 0, 0, (short) 4, 2, (short) 6, 5));
     88         // 设置注释内容
     89         comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));
     90         // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.
     91         comment.setAuthor("leno");
     92 
     93         // 产生表格标题行
     94         HSSFRow row = sheet.createRow(0);
     95         for (short i = 0; i < headers.length; i++) {
     96             HSSFCell cell = row.createCell(i);
     97             cell.setCellStyle(style);
     98             HSSFRichTextString text = new HSSFRichTextString(headers[i]);
     99             cell.setCellValue(text);
    100         }
    101 
    102         // 遍历集合数据,产生数据行
    103         Iterator<T> it = dataset.iterator();
    104         int index = 0;
    105         while (it.hasNext()) {
    106             index++;
    107             row = sheet.createRow(index);
    108             T t = (T) it.next();
    109             // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
    110             Field[] fields = t.getClass().getDeclaredFields();
    111             for (short i = 0; i < fields.length; i++) {
    112                 HSSFCell cell = row.createCell(i);
    113                 cell.setCellStyle(style2);
    114                 Field field = fields[i];
    115                 String fieldName = field.getName();
    116                 String getMethodName = "get"
    117                         + fieldName.substring(0, 1).toUpperCase()
    118                         + fieldName.substring(1);
    119                 try {
    120                     Class tCls = t.getClass();
    121                     Method getMethod = tCls.getMethod(getMethodName,
    122                             new Class[] {});
    123                     Object value = getMethod.invoke(t, new Object[] {});
    124                     // 判断值的类型后进行强制类型转换
    125                     String textValue = null;
    126                     // if (value instanceof Integer) {
    127                     // int intValue = (Integer) value;
    128                     // cell.setCellValue(intValue);
    129                     // } else if (value instanceof Float) {
    130                     // float fValue = (Float) value;
    131                     // textValue = new HSSFRichTextString(
    132                     // String.valueOf(fValue));
    133                     // cell.setCellValue(textValue);
    134                     // } else if (value instanceof Double) {
    135                     // double dValue = (Double) value;
    136                     // textValue = new HSSFRichTextString(
    137                     // String.valueOf(dValue));
    138                     // cell.setCellValue(textValue);
    139                     // } else if (value instanceof Long) {
    140                     // long longValue = (Long) value;
    141                     // cell.setCellValue(longValue);
    142                     // }
    143                     if (value instanceof Boolean) {
    144                         boolean bValue = (Boolean) value;
    145                         textValue = "男";
    146                         if (!bValue) {
    147                             textValue = "女";
    148                         }
    149                     } else if (value instanceof Date) {
    150                         Date date = (Date) value;
    151                         SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    152                         textValue = sdf.format(date);
    153                     } else if (value instanceof byte[]) {
    154                         // 有图片时,设置行高为60px;
    155                         row.setHeightInPoints(60);
    156                         // 设置图片所在列宽度为80px,注意这里单位的一个换算
    157                         sheet.setColumnWidth(i, (short) (35.7 * 80));
    158                         // sheet.autoSizeColumn(i);
    159                         byte[] bsValue = (byte[]) value;
    160                         HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,
    161                                 1023, 255, (short) 6, index, (short) 6, index);
    162                         anchor.setAnchorType(2);
    163                         patriarch.createPicture(anchor, workbook.addPicture(
    164                                 bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
    165                     } else {
    166                         // 其它数据类型都当作字符串简单处理
    167                         textValue = value.toString();
    168                     }
    169                     // 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成
    170                     if (textValue != null) {
    171                         Pattern p = Pattern.compile("^//d+(//.//d+)?$");
    172                         Matcher matcher = p.matcher(textValue);
    173                         if (matcher.matches()) {
    174                             // 是数字当作double处理
    175                             cell.setCellValue(Double.parseDouble(textValue));
    176                         } else {
    177                             HSSFRichTextString richString = new HSSFRichTextString(
    178                                     textValue);
    179                             HSSFFont font3 = workbook.createFont();
    180                             font3.setColor(HSSFColor.BLUE.index);
    181                             richString.applyFont(font3);
    182                             cell.setCellValue(richString);
    183                         }
    184                     }
    185                 } catch (SecurityException e) {
    186                     e.printStackTrace();
    187                 } catch (NoSuchMethodException e) {
    188                     e.printStackTrace();
    189                 } catch (IllegalArgumentException e) {
    190                     e.printStackTrace();
    191                 } catch (IllegalAccessException e) {
    192                     e.printStackTrace();
    193                 } catch (InvocationTargetException e) {
    194                     e.printStackTrace();
    195                 } finally {
    196                     // 清理资源
    197                 }
    198             }
    199         }
    200         try {
    201             workbook.write(out);
    202         } catch (IOException e) {
    203             e.printStackTrace();
    204         }
    205     }
    206 /*
    207     public static void main(String[] args) {
    208         class testUser {
    209             String name;
    210             String id;
    211             String remark;
    212 
    213             public String getName() {
    214                 return name;
    215             }
    216 
    217             public void setName(String name) {
    218                 this.name = name;
    219             }
    220 
    221             public String getId() {
    222                 return id;
    223             }
    224 
    225             public void setId(String id) {
    226                 this.id = id;
    227             }
    228 
    229             public String getRemark() {
    230                 return remark;
    231             }
    232 
    233             public void setRemark(String remark) {
    234                 this.remark = remark;
    235             }
    236         }
    237         ExportExcel<testUser> ex = new ExportExcel<testUser>();
    238         String[] headers = { "id", "详细", "备注" };
    239         List<testUser> dataset = new ArrayList<testUser>();
    240         testUser t = new testUser();
    241         t.setId("id");
    242         t.setName("name");
    243         t.setRemark("remark");
    244         dataset.add(t);
    245         testUser t1 = new testUser();
    246         t1.setId("id2");
    247         t1.setName("name2");
    248         t1.setRemark("remark2");
    249         dataset.add(t1);
    250         try {
    251 
    252             OutputStream out = new FileOutputStream("D://d.xls");
    253             ex.exportExcel("测试POI导出EXCEL文档", headers, dataset, out, null);
    254             out.close();
    255             JOptionPane.showMessageDialog(null, "导出成功!");
    256             System.out.println("excel导出成功!");
    257         } catch (FileNotFoundException e) {
    258             e.printStackTrace();
    259         } catch (IOException e) {
    260             e.printStackTrace();
    261         }
    262     }*/
    263 }

    POI3.10jar包下载
    实现方法参考他人博客,已无法找到出处!仅供大家参考
  • 相关阅读:
    微服务架构的设计原则
    分布式锁
    银行卡Bin和Logo
    Docker部署Jenkins
    云服务器配置 docker java mysql mongodb redis nginx jenkins 环境
    Mybatis使用心德
    CTO 技能图谱
    React 面试问题
    Dart语法学习
    第一篇博客
  • 原文地址:https://www.cnblogs.com/dengqz/p/3715548.html
Copyright © 2020-2023  润新知