zoukankan      html  css  js  c++  java
  • POI导出Excel文档通用工具方法

    import java.lang.reflect.InvocationTargetException;
    import java.util.List;
    import java.util.Map;
    
    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.XSSFRichTextString;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    /**
     * @description Excel(.xlsx格式)导出通用工具类
     * 1.该工具通过传入参数可以自定义行和列
     * 2.该工具类时终端系统默认的通用导出格式,即文档标题,标题下方导出参数,表格表头,表格数据等
     * 3.使用示例详见终端-我的权益计划-权益列表导出
     * @date 2016-1-26
     * @author ZhangLP
     */
    public class ExcelExportUtil {
        
        /**************************************************方法说明start*******************************************************
        *  导出excel主方法
        *  @param list 需要导出的数据list,对该list的要求:必须是一个Bean对象类型的list,Bean可以时任意一个
        *  @param requestmap 参数要求如下:
        *      1.该map泛型为<String,Object><br>
        *      2.该map中必须包含th,td,param,paramName以及若干其它值,示例如下:<br>
        *                
        *        ①表头标题,与下面的反射方法名个数及顺序一一对应(序号一项除外)用英文半角下划线隔开<br>
        *        map.put("th", "序号_频道_节目_品牌");<br>
        *                    
        *        ②表格行所对应的实体反射方法名,必须与导出传入list中的实体get方法一致,用英文半角下划线隔开<br>
        *        map.put("td", "getChannelName_getProgramName_getTypeName");<br>
        *                    
        *        ③表格表头上方查询参数数据获取字段定义,必须与上面1.导出参数中的名称一致,它将作为导出文档标题下方的条件,用英文半角下划线隔开<br>
        *        map.put("param", "channelName_programName_companyName_brandName");<br>
        *                    
        *        ④表格表头上方查询参数字段标题,与③中的名称对应,作为③中数据的说明,它将作为导出文档下方的条件的说明,用英文半角下划线隔开<br>
        *        map.put("paramName", "频道:_节目:_厂商:_品牌:");<br>
        *                    
        *        ⑤若干条件字段值,与③中的值对应<br>
        *        map.put("channelName","...");<br>
        *        map.put("programName","...");<br>
        *        map.put("companyName","...");<br>
        *        map.put("brandName","...");<br>
        *  @return 返回XSSFWorkbook对象,将用于转化输出流
         *****************************************************方法说明end******************************************************/
        public XSSFWorkbook exportExcel(List<? extends Object> list,Map<String,Object> requestmap) {
            XSSFWorkbook wb = new XSSFWorkbook();            // 创建一个webbook
            XSSFSheet sheet = wb.createSheet("sheet");        // 在webbook中添加一个sheet
            XSSFRow row = null;                                // 在sheet中声明行
            XSSFCell cell;    
            message(requestmap,wb,row,sheet);            // 条件区处理
            //标题行样式
            XSSFCellStyle titleStyle=XExcelUtil.borderTitle(wb);
            //内容行样式
            XSSFCellStyle bodyStyle=XExcelUtil.borderBody(wb);
            
            //获取上一行行号
            int lastNumber=sheet.getLastRowNum();
            row = XExcelUtil.createHeightRow(sheet,lastNumber+1);
    
            //表头th
            String th = (String)requestmap.get("th");
            for(int i=0; i < th.split("_").length; i++) {
                cell = row.createCell((int) i);                // 列数
                cell.setCellValue(th.split("_")[i]);            // 列名称
                cell.setCellStyle(titleStyle);                    // 列样式
            }
    
            //表格行td
            String td = (String)requestmap.get("td");
            for(int i = 0; i < list.size(); i++) {
                row = XExcelUtil.createHeightRow(sheet,(int) i + lastNumber+2);
                row.createCell(0).setCellValue(i+1);//序号自增
                try {
                    //循环填充每行的每个字段,根据传入的实体方法名反射得到list中的实体字段内容
                    Class<? extends Object> listClass = list.get(i).getClass();
                    for(int j = 0; j < td.split("_").length; j++){
                        row.createCell(j+1).setCellValue(listClass.getMethod(td.split("_")[j]).invoke(list.get(i))+"");
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                } catch (IllegalArgumentException e) {
                    e.printStackTrace();
                } catch (InvocationTargetException e) {
                    e.printStackTrace();
                } catch (NoSuchMethodException e) {
                    e.printStackTrace();
                } catch (SecurityException e) {
                    e.printStackTrace();
                }
    
                //循环填充样式
                for(int k=0;k<row.getLastCellNum();k++){
                    row.getCell(k).setCellStyle(bodyStyle);
                }
                
            }
            //列宽自适应
            for(int i=0; i < th.split("_").length; i++) {
                sheet.autoSizeColumn(0, true);
                sheet.autoSizeColumn(i, true);
            }
            return wb;
    
        }
        
        /**
         * 头信息处理(title及条件区及部分样式)
         * @param list
         * @param requestmap
         * @param wb
         * @param row
         * @param sheet
         */
        private static void message(Map<String,Object> requestmap, XSSFWorkbook wb,XSSFRow row,XSSFSheet sheet){
            sheet.setDisplayGridlines(false);//设置隐藏网格线
    
            //最后一行行号
            int lastNumber=0;
            sheet.addMergedRegion(new CellRangeAddress(0, (short) 0, 0, (short) 1));//跨一行2列
            //条件行样式
            XSSFCellStyle conditionStyle=XExcelUtil.conditionCellStyle(wb);
            
            row = XExcelUtil.createHeightRow(sheet,0);
            XSSFCell firstXSSFCell = row.createCell(0);
            firstXSSFCell.setCellType(XSSFCell.CELL_TYPE_STRING);
            firstXSSFCell.setCellValue(new XSSFRichTextString("XXXXX"));
            firstXSSFCell.setCellStyle(XExcelUtil.companyCellStyle(wb));//设置单元格的样式
            
            //条件key:通过它可以从map中获取条件名称,例如:湖南卫视
            String param = (String)requestmap.get("param");
            String[] paramArr = param.split("_");
            //条件说明:例如:频道
            String paramName = (String)requestmap.get("paramName");
            String[] paramNameArr = paramName.split("_");
            //循环条件写入条件区
            for(int i = 0; i < paramArr.length; i ++){
                lastNumber=sheet.getLastRowNum();
                row = XExcelUtil.createHeightRow(sheet,lastNumber+1);
                if(StringUtils.isNotEmpty((String)requestmap.get(paramArr[i]))){
                    row.createCell(0).setCellValue(paramNameArr[i]);
                    row.createCell(1).setCellValue((String)requestmap.get(paramArr[i]));
                }else{
                    row.createCell(0).setCellValue(paramNameArr[i]);
                    row.createCell(1).setCellValue("无限制");
                }
            }
    
            //条件区与数据区空一行
            lastNumber=sheet.getLastRowNum();
            row = XExcelUtil.createHeightRow(sheet,lastNumber+1);
            for(int i=1;i<sheet.getLastRowNum()+1;i++){
                row=sheet.getRow(i);
                for(int j=0;j<row.getLastCellNum();j++){
                    row.getCell(j).setCellStyle(conditionStyle);
                }
            }
    
        }
    }

    XExcelUtil工具类

        /** 设置excel的company title样式       */ 
        public static XSSFCellStyle companyCellStyle(XSSFWorkbook wb) {
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontHeight((short) 260);
            boldFont.setFontName("微软雅黑");
            XSSFCellStyle cellStyle = wb.createCellStyle();
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
        
        /** 
         * excel (条件区黑体居左)
         */
        public static XSSFCellStyle conditionCellStyle(XSSFWorkbook wb){
            XSSFCellStyle cellStyle = wb.createCellStyle();  
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_LEFT); // 左对齐
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中 
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setFontHeightInPoints((short) 10);    //设置字体大小  
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
        
        /**
         * 数据表格标题样式:07版本
         */
        public static CellStyle borderTitle(SXSSFWorkbook wb) {
            CellStyle cellStyle = wb.createCellStyle();
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); // 下边框
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);// 左边框
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);// 上边框
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);// 右边框
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 左右居中
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中
    
            Font boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD); // 字体增粗
            boldFont.setFontHeightInPoints((short) 10); // 设置字体大小
            // boldFont.setColor(HSSFColor.WHITE.index);
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
    
        /**
         * 数据表格数据区样式:07版本
         */
        public static CellStyle borderBody(SXSSFWorkbook wb) {
            CellStyle cellStyle = wb.createCellStyle();
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); // 下边框
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);// 左边框
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);// 上边框
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);// 右边框
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 左右居中
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中
    
            Font boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setFontHeightInPoints((short) 10); // 设置字体大小
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
        
        /** 
         * 数据表格标题样式
         */
        public static XSSFCellStyle borderTitle(XSSFWorkbook wb){
            XSSFCellStyle cellStyle = wb.createCellStyle();  
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框    
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框    
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框    
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框    
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 左右居中    
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中
             
            
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);     //字体增粗
            boldFont.setFontHeightInPoints((short) 10);            //设置字体大小  
            //boldFont.setColor(HSSFColor.WHITE.index);
         
            
            
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
        
        /** 
         * 数据表格标题样式
         */
        public static XSSFCellStyle borderTitleWeixin(XSSFWorkbook wb){
            XSSFCellStyle cellStyle = wb.createCellStyle();  
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框    
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框    
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框    
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框    
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 左右居中    
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中
             
            cellStyle.setFillBackgroundColor(IndexedColors.SKY_BLUE.getIndex()); 
            cellStyle.setFillForegroundColor(IndexedColors.SKY_BLUE.index); 
            cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);     //字体增粗
            boldFont.setFontHeightInPoints((short) 18);            //设置字体大小  
            boldFont.setColor(IndexedColors.WHITE.index);
         
            
            
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
        
        
        /** 
         * 数据来源样式
         */
        public static XSSFCellStyle SourceBorder(XSSFWorkbook wb){
            XSSFCellStyle cellStyle = wb.createCellStyle();  
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框    
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框    
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框    
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框    
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_LEFT); // 左右居中     
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中
     
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);     //字体增粗
            boldFont.setFontHeightInPoints((short) 10);            //设置字体大小  
         
            
            
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
        
        
        /** 
         * 数据来源样式
         */
        public static XSSFCellStyle SourceBorderWeixin(XSSFWorkbook wb){
            XSSFCellStyle cellStyle = wb.createCellStyle();  
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框    
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框    
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框    
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框    
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_LEFT); // 左右居中     
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中
              
             
            
            cellStyle.setFillBackgroundColor(IndexedColors.LIGHT_TURQUOISE.getIndex()); 
            cellStyle.setFillForegroundColor(new XSSFColor( new Color(225, 245, 255))); 
            cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
            
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);     //字体增粗
            boldFont.setFontHeightInPoints((short) 18);            //设置字体大小  
         
            
            
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
        /** 
         * 数据表格数据区样式
         */
        public static XSSFCellStyle borderBody(XSSFWorkbook wb){
            XSSFCellStyle cellStyle = wb.createCellStyle();  
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框    
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框    
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框    
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框    
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 左右居中    
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中 
             
            
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setFontHeightInPoints((short) 10);            //设置字体大小  
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
        
        /** 
         * 数据表格数据区样式
         */
        public static XSSFCellStyle borderBodyWeixin(XSSFWorkbook wb){
            XSSFCellStyle cellStyle = wb.createCellStyle();  
            cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框    
            cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框    
            cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框    
            cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框    
            cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 左右居中    
            cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);// 上下居中 
            
             
            //设置背景色
            cellStyle.setFillBackgroundColor(IndexedColors.LIGHT_TURQUOISE.getIndex()); 
            cellStyle.setFillForegroundColor(new XSSFColor( new Color(225, 245, 255))); 
            cellStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
            
            
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setFontHeightInPoints((short) 18);            //设置字体大小  
            cellStyle.setFont(boldFont);
            return cellStyle;
        }
        
        
        
    
        /** 
         * 大标题(居中)
         * 软广栏目对比
         */
        public static XSSFCellStyle styleBig(XSSFWorkbook wb) {
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);         //字体增粗
            boldFont.setFontHeightInPoints((short) 20);// 设置字体大小  
    
            XSSFCellStyle style = wb.createCellStyle();
            style.setFont(boldFont);
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 
            style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
            style.setFillForegroundColor((short)7);
            
            style.setBorderBottom(XSSFCellStyle.BORDER_THIN); //下边框    
            style.setBorderLeft(XSSFCellStyle.BORDER_THIN);//左边框    
            style.setBorderTop(XSSFCellStyle.BORDER_THIN);//上边框    
            style.setBorderRight(XSSFCellStyle.BORDER_THIN);//右边框    
            return style;
        }
        
        /** 
         * 小标题及条件(居左)
         * 软广栏目对比
         */
        public static XSSFCellStyle styleSmall(XSSFWorkbook wb) {
            XSSFFont boldFont = wb.createFont();
            boldFont.setFontName("微软雅黑");
            boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);         //字体增粗
            boldFont.setFontHeightInPoints((short) 10);// 设置字体大小  
    
            XSSFCellStyle style = wb.createCellStyle();
            style.setFont(boldFont);
            style.setFillForegroundColor((short)7);
            style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 上下居中 
            style.setAlignment(HSSFCellStyle.ALIGN_LEFT);
            
            style.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框    
            style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框    
            style.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框    
            style.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框    
            return style;
        }
        
        
        
        /** 
         * 创建行,并附行高
         * (short)15.625  一个像素1px的值
         */
        public static XSSFRow createHeightRow(XSSFSheet sheet,int rowNumber){
            XSSFRow row=sheet.createRow(rowNumber);
            row.setHeight((short)(27.25*20.00));
            return row;
        }
        
        /** 
         * 创建行,并附行高
         * (short)15.625  一个像素1px的值
         */
        public static XSSFRow createTitleHeightRow(XSSFSheet sheet,int rowNumber){
            XSSFRow row=sheet.createRow(rowNumber);
            row.setHeight((short)(48.625*20.00));
            return row;
        }
  • 相关阅读:
    #公式与实现# Jacobi迭代 Gauss-Seidel迭代
    数据结构-C:二叉树的遍历
    c++
    Unix Systems Programming
    二进制文件读取写入(一)
    关于理论、模型与算法
    《计算机图形学与几何造型导论》读书笔记1
    petaPar培训文档
    等参元的高斯积分详解
    水平集函数具体实现
  • 原文地址:https://www.cnblogs.com/dreamzhiya/p/5171334.html
Copyright © 2011-2022 走看看