生成Excel文档工具类

 1 /**
 2  * 生成Excel工具类
 3  * headers:表头
 4  * dataset:javabean集合
 5  * fileName:生成的Excel名称
 6  * response:将excel表以字节流的形式返回给前端
 7  * 这里使用的是poi工具类下的xssf,生成的excel要要以.xlsx结尾
 8  * 如果使用hssf,生成的excel要以.xls结尾,且一个sheet里的数据最多只能有65535行
 9  * @param <T>
10  */
11 @Component("exportExcel")
12 public class ExportExcelXSSFUtils<T> {
13     public void exportExcel(String[] headers, Collection<T> dataset, String fileName, HttpServletResponse response) {
14         // 声明一个工作薄
15         XSSFWorkbook workbook = new XSSFWorkbook();
16         // 生成一个表格
17         XSSFSheet sheet = workbook.createSheet(fileName);
18         //样式对象
19         XSSFCellStyle style=workbook.createCellStyle();
20         // 设置表格默认列宽度为15个字节
21         sheet.setDefaultColumnWidth(15);
22         // 产生表格标题行
23         XSSFRow row = sheet.createRow(0);
24         row.setHeightInPoints(30);//设置行高
25         for (int i = 0; i < headers.length; i++) {
26             XSSFCell cell=row.createCell(i);
27             //设置背景
28             style.setFillBackgroundColor((short)13);
29            // style.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
30             //设置字体
31             XSSFFont font2 = workbook.createFont();
32             font2.setFontName("仿宋_GB2312");
33            // font2.setBoldweight(XSSFFont.);//粗体显示
34             font2.setFontHeightInPoints((short) 12);  //字体大小
35             //font2.setColor(XSSFColor.toXSSFColor(c).index);//设置字体颜色
36             style.setFont(font2);//选择需要用到的字体格式
37             XSSFRichTextString text = new XSSFRichTextString(headers[i]);
38             cell.setCellStyle(style);
39             cell.setCellValue(text);
40         }
41         try {
42             // 遍历集合数据,产生数据行
43             Iterator<T> it = dataset.iterator();
44             int index = 0;
45             while (it.hasNext()) {
46                 index++;
47                 row = sheet.createRow(index);
48                 T t = (T) it.next();
49                 // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
50                 Field[] fields = t.getClass().getDeclaredFields();
51                 for (int i = 0; i < headers.length; i++) {
52                     XSSFCell cell = row.createCell(i);
53                     Field field = fields[i];
54                     String fieldName = field.getName();
55                     String getMethodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
56                     Class tCls = t.getClass();
57                     Method getMethod = tCls.getMethod(getMethodName, new Class[] {});
58                     Object value = getMethod.invoke(t, new Object[] {});
59                     // 判断值的类型后进行强制类型转换
60                     String textValue = null;
61                     // 其它数据类型都当作字符串简单处理
62                     if(value != null && value != ""){
63                         textValue = value.toString();
64                     }else{
65                         textValue=String.valueOf(index);
66                     }
67                     if (textValue != null) {
68                         XSSFRichTextString richString = new XSSFRichTextString(textValue);
69                         cell.setCellValue(richString);
70                     }
71                 }
72             }
73             getExportedFile(workbook, fileName,response);
74         } catch (Exception e) {
75             e.printStackTrace();
76         }
77     }
78 /**
79      *
80      * 方法说明: 指定路径下生成EXCEL文件
81      * @return
82      */
83 
84     public void getExportedFile(XSSFWorkbook workbook, String name, HttpServletResponse response) throws Exception {
85         System.out.println("name:"+name);
86         BufferedOutputStream fos = null;
87         try {
88             String fileName = name + ".xlsx";
89             response.setContentType("application/octet-stream");
90             response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"ISO8859-1"));
91             response.flushBuffer();
92             workbook.write(response.getOutputStream());
93         } catch (Exception e) {
94             e.printStackTrace();
95         } finally {
96                 System.out.println("ok");
97         }
98     }
99 }

 



posted on 2020-06-30 11:02  只挣朝夕  阅读(269)  评论(0)    收藏  举报