• 导出Excel offer2007以上


    package cn.knet.data.untils;
    
    
    import java.awt.Color;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.text.SimpleDateFormat;
    import java.util.Collection;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.lang.StringUtils;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFColor;
    import org.apache.poi.xssf.usermodel.XSSFFont;
    import org.apache.poi.xssf.usermodel.XSSFRichTextString;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    public class ExportExcelUtil2<T> {
    
        public void exportExcel(Collection<T> dataset,String[] headers,String path,String excelName,String sheetName,String title) throws IOException
        {
            // 声明一个工作薄
            XSSFWorkbook workbook = new XSSFWorkbook();
            // 生成一个表格
            XSSFSheet sheet=workbook.createSheet();
            
            // 设置表格默认列宽度为15个字节
            //要是提供的sheetName就给第一个表格设置名字
            if(StringUtils.isNotBlank(sheetName))
            {
                workbook.setSheetName(0,sheetName);
            }
            //设置行的默认值
            int row_num=0;
            if(StringUtils.isNotBlank(title)){
                XSSFRow rowtitle = sheet.createRow(row_num);  
                rowtitle.setHeightInPoints(23);  
                XSSFCell cellHead = rowtitle.createCell(0);
                cellHead.setCellValue(title); 
                //合并标题的单元格
                sheet.addMergedRegion(new CellRangeAddress(row_num,row_num,0,headers.length-1));//startRow,endRow,startColumn,endColumn
                //设置总标题样式==============================
                //设置字体
                XSSFFont font_title = workbook.createFont();
                font_title.setColor(new XSSFColor(Color.black).getIndexed());
                font_title.setFontHeightInPoints((short) 16);
                font_title.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
                //设置title样式
                XSSFCellStyle style_title = workbook.createCellStyle(); 
                style_title.setAlignment(XSSFCellStyle.ALIGN_CENTER);
                style_title.setBorderBottom(XSSFCellStyle.BORDER_THIN);
                style_title.setBorderLeft(XSSFCellStyle.BORDER_THIN);
                style_title.setBorderRight(XSSFCellStyle.BORDER_THIN);
                style_title.setBorderTop(XSSFCellStyle.BORDER_THIN);
                style_title.setFont(font_title);
                //设置cell样式
                cellHead.setCellStyle(style_title);
                //解决合并单元格后加边框问题
                for(int i=1;i<headers.length;i++){
                    cellHead = rowtitle.createCell(i);
                    cellHead.setCellValue("");
                    cellHead.setCellStyle(style_title);
                    }
                
                
                //行数加1行
                row_num=row_num+1;
            }
            
            //设置head样式============================================
            // 生成一个字体
            XSSFFont font_head = workbook.createFont();
            font_head.setColor(new XSSFColor(Color.BLACK).getIndexed());
            font_head.setFontHeightInPoints((short) 12);
            font_head.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
           // 生成head样式
            XSSFCellStyle style_head = workbook.createCellStyle();
            // 把字体应用到当前的样式
            style_head.setFont(font_head);
           // 设置这些样式
           // style_head.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
            //style_head.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            style_head.setBorderBottom(XSSFCellStyle.BORDER_THIN);
            style_head.setBorderLeft(XSSFCellStyle.BORDER_THIN);
            style_head.setBorderRight(XSSFCellStyle.BORDER_THIN);
            style_head.setBorderTop(XSSFCellStyle.BORDER_THIN);
            style_head.setAlignment(XSSFCellStyle.ALIGN_CENTER);
          //设置head样式======End==================================
          //设置body样式==================================================
          // 生成另一个字体
            XSSFFont font_body = workbook.createFont();
            font_body.setBoldweight(XSSFFont.BOLDWEIGHT_NORMAL);
            //生成body样式
            XSSFCellStyle style_body = workbook.createCellStyle();
           // 把字体应用到当前的样式
            style_body.setFont(font_body);
           // style_body.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
            //style_body.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            style_body.setBorderBottom(XSSFCellStyle.BORDER_THIN);
            style_body.setBorderLeft(XSSFCellStyle.BORDER_THIN);
            style_body.setBorderRight(XSSFCellStyle.BORDER_THIN);
            style_body.setBorderTop(XSSFCellStyle.BORDER_THIN);
            style_body.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            style_body.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
            
           // 添加表格标题行
            XSSFRow row_head = sheet.createRow(row_num);
            row_head.setHeightInPoints(25);
            for (int i = 0; i < headers.length; i++) {
                XSSFCell cell = row_head.createCell(i);
                cell.setCellStyle(style_head);
                XSSFRichTextString text = new XSSFRichTextString(headers[i]);
                cell.setCellValue(text);
            }
            //添加标题行后行号加1
            row_num=row_num+1;
            //添加body
            // 遍历集合数据,产生数据行
            //Field[] fields = types.getDeclaredFields();
            Iterator<T> it = dataset.iterator();
            while (it.hasNext()) {
                System.err.println(row_num);
                XSSFRow row_body = sheet.createRow(row_num);
                row_body.setHeightInPoints(20);
                
                T t = (T) it.next();
                // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
                Field[] fields = t.getClass().getDeclaredFields();
                for (int i = 0; i < fields.length; i++) {
                    
                    //设置列宽度自适应
                    sheet.autoSizeColumn(i,true);
                    
                    XSSFCell cell = row_body.createCell(i);
                    cell.setCellStyle(style_body);
                    Field field = fields[i];
                    String fieldName = field.getName();
                    String getMethodName = "get"+ fieldName.substring(0, 1).toUpperCase()+ fieldName.substring(1);
                    try {
                        Class<? extends Object> tCls = t.getClass();
                        Method getMethod = tCls.getMethod(getMethodName,new Class[] {});
                        Object value = getMethod.invoke(t, new Object[] {});
                     // 判断值的类型后进行强制类型转换
                        String textValue = null;
                        if (value instanceof Integer) {
                            int intValue = (Integer) value;
                            cell.setCellValue(intValue);
                          } 
                         else if (value instanceof Float) {
                            float fValue = (Float) value;
                            textValue = String.valueOf(fValue);
                            cell.setCellValue(textValue);
                          } 
                         else if (value instanceof Double) {
                            double dValue = (Double) value;
                            textValue = String.valueOf(dValue);
                            cell.setCellValue(textValue);
                          } 
                         else if (value instanceof Long) {
                            long longValue = (Long) value;
                            cell.setCellValue(longValue);
                          }
                         else if (value instanceof Date) {
                             Date date = (Date) value;
                             SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
                             textValue = sdf.format(date);
                         }else {
                            // 其它数据类型都当作字符串简单处理
                            textValue = value.toString();
                        }
                        
                        if (textValue != null) {
                            Pattern p = Pattern.compile("^//d+(//.//d+)?{1}");
                            Matcher matcher = p.matcher(textValue);
                            if (matcher.matches()) {
                                // 是数字当作double处理
                                cell.setCellValue(Double.parseDouble(textValue));
                            } else {
                                XSSFRichTextString richString = new XSSFRichTextString(textValue);
                                XSSFFont font3 = workbook.createFont();
                                font3.setColor(new XSSFColor(Color.BLACK).getIndexed());
                                richString.applyFont(font3);
                                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 {
                        // 清理资源
                    }
                }
                row_num=row_num+1;
            }
            OutputStream os = new FileOutputStream(new File(path+"/"+excelName+".xlsx"));  
            try{
              workbook.write(os); 
            }
            catch(Exception ex){
                ex.printStackTrace();
            }
            finally{
                os.flush();
                os.close(); 
            }
            
            
        }
        
        public void exportExcelFast(Collection<T> dataset,String[] headers,Class<T> t,String path,String excelName,String sheetName) throws IOException
        {
             FileOutputStream output = new FileOutputStream(new File(path+"/"+excelName+".xlsx")); //读取的文件路径   
            // 声明一个工作薄
                XSSFWorkbook workbook = new XSSFWorkbook();
                // 生成一个表格
                XSSFSheet sheet=workbook.createSheet(sheetName);
                 XSSFRow row_head = sheet.createRow(0);
                for (int i = 0; i < headers.length; i++) {
                    XSSFCell cell = row_head.createCell(i);
                    XSSFRichTextString text = new XSSFRichTextString(headers[i]);
                    cell.setCellValue(text);
                }
                
                Field[] fields = t.getDeclaredFields();
                int row_num=1;
                for (T tt : dataset) {
                    
                    XSSFRow row_body = sheet.createRow(row_num);
                     for(int i=0;i<fields.length;i++){
                         XSSFCell cell = row_body.createCell(i);   
                        Object v;
                        try {
                            v = BeanUtils.getProperty(tt, fields[i].getName());
                            String value =v==null?"":v.toString();
                             cell.setCellType(XSSFCell.CELL_TYPE_STRING);//文本格式  
                             cell.setCellValue(value);//写入内容 
                        } catch (IllegalAccessException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (InvocationTargetException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (NoSuchMethodException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }//.getBeanProperty(tt, fields[i].getName());
                         
                     }
                     row_num++;
                }
    
                
                workbook.write(output);  
                output.flush();
                output.close();    
        }
        public static void main(String[] args){
            /* List<Flow> list = new ArrayList<Flow>();
             for(int i=0;i<50000;i++)
             {
                 Flow f = new Flow();
                 f.setCurkey("枯萎奇才霏霏夺标需要奇怪棒棒酩酊大醉大模大样大模大样"+i);
                 f.setFlow(i);
                 list.add(f);
             }
              ExportExcelUtil2<Flow> ex = new ExportExcelUtil2<Flow>();
              String[] headers= {"KEY","流水"};
              try {
                //ex.exportExcelFast(list, headers,Flow.class, "D:\", "MYExcel", "MySheet");
                ex.exportExcel(list, headers, "D:\", "MYExcel", "MySheet","");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }*/
        }
        
    }
  • 相关阅读:
    @Value注解读取配置,给静态变量赋值
    SpringBoot中非Controller类调用service方法出现null空指针
    nacos多环境配置
    spring项目将配置迁移至nacos
    链表的翻转(java)
    java.lang.IllegalAccessError: tried to access method org.apache.poi.util.POILogger.log from class org.apache.poi.openxml4j.opc.ZipPackage
    SQL SERVER 存储过程将SELECT 数据集赋值给新表某个字段
    SQLServerException:将截断字符串或二进制数据
    获取mysql数据库表表头所有字段
    软工实践个人总结
  • 原文地址:https://www.cnblogs.com/feiyun126/p/4778583.html
Copyright © 2020-2023  润新知