excel工具类

package cn.com.qmhd.iicp.crm.util;
import java.io.OutputStream;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.formula.functions.T;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Drawing;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFDrawing;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
import cn.com.qmhd.iicp.crm.modal.Callrecords;
import cn.com.qmhd.iicp.crm.modal.TelephoneBook;
import cn.com.qmhd.iicp.crm.result.CallResult;
 
 
/**
 *
 * @author 李东坡
 * @version 1.0
 * @时间 2016年4月22日
 * @描述
 */
public class ExcelExportUtil<T> {
 
    /**
     * 导出excel工具类
     * @title exportExcel
     * @author 李东坡 2016年4月22日
     * @param title sheet名称
     * @param headers 表头
     * @param columns 列
     * @param result 数据集
     * @param out
     * @throws Exception
     * @description
     */
    public void exportExcel(String title, String[] headers, String[] columns,
            List<Map<String, String>> result, OutputStream out)
            throws Exception {
        // 声明一个工作薄
        @SuppressWarnings("resource")
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 生成一个表格
        HSSFSheet sheet = workbook.createSheet(title);
        // 设置表格默认列宽度为20个字节
        sheet.setDefaultColumnWidth(25);
 
        // 生成一个样式
        HSSFCellStyle style = workbook.createCellStyle();
        // 设置这些样式
        style.setFillForegroundColor(HSSFColor.GOLD.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.VIOLET.index);
        // font.setFontHeightInPoints((short) 12);
        font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
        // 把字体应用到当前的样式
        style.setFont(font);
 
        // 指定当单元格内容显示不下时自动换行
        style.setWrapText(true);
 
        sheet.createDrawingPatriarch();
 
        // 产生表格标题行
        // 表头的样式
        HSSFCellStyle titleStyle = workbook.createCellStyle();// 创建样式对象
        titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);// 水平居中
        titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直居中
        // 设置字体
        HSSFFont titleFont = workbook.createFont(); // 创建字体对象
        titleFont.setFontHeightInPoints((short) 15); // 设置字体大小
        titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 设置粗体
        // titleFont.setFontName("黑体"); // 设置为黑体字
        titleStyle.setFont(titleFont);
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, (headers.length - 1)));// 指定合并区域
        HSSFRow rowHeader = sheet.createRow(0);
        HSSFCell cellHeader = rowHeader.createCell(0); // 只能往第一格子写数据,然后应用样式,就可以水平垂直居中
        HSSFRichTextString textHeader = new HSSFRichTextString(title);
        cellHeader.setCellStyle(titleStyle);
        cellHeader.setCellValue(textHeader);
 
        HSSFRow row = sheet.createRow(1);
        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);
        }
        // 遍历集合数据,产生数据行
        if (result != null) {
            int index = 2;
            for (Map<String, String> m : result) {
                row = sheet.createRow(index);
                index++;
                for (int i = 0; i < columns.length; i++) {
                    Cell cell = row.createCell(i, Cell.CELL_TYPE_BLANK);
                    String text = m.get(columns[i]);
                    HSSFRichTextString richString = new HSSFRichTextString(text);
                    cell.setCellValue(richString);
                }
            }
        }
        workbook.write(out);
    }
 
//  @Deprecated
//  public void expoortExcelx(String title, String[] headers, String[] columns,
//          Collection<T> result, OutputStream out, String pattern) throws NoSuchMethodException, Exception{
//          //创建工作薄
//          XSSFWorkbook workbook=new XSSFWorkbook();
//          //创建表格
//          Sheet sheet=workbook.createSheet("title");
//          //设置默认宽度
//          sheet.setDefaultColumnWidth(25);
//          //创建样式
//          XSSFCellStyle style=workbook.createCellStyle();
//          //设置样式
//          style.setFillForegroundColor(IndexedColors.GOLD.index);
//          style.setFillPattern(CellStyle.SOLID_FOREGROUND);
//          style.setBorderBottom(CellStyle.BORDER_THIN);
//          style.setBorderLeft(CellStyle.BORDER_THIN);
//          style.setBorderRight(CellStyle.BORDER_THIN);
//          style.setBorderTop(CellStyle.BORDER_THIN);
//          //生成字体
//          XSSFFont font=workbook.createFont();
//          font.setColor(IndexedColors.VIOLET.index);
//          font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
//          //应用字体
//          style.setFont(font);
//         
//          //自动换行
//          style.setWrapText(true);
//          //声明一个画图的顶级管理器
//          Drawing drawing=(XSSFDrawing) sheet.createDrawingPatriarch();
//          //表头的样式
//          XSSFCellStyle titleStyle=workbook.createCellStyle();//样式对象
//          titleStyle.setAlignment(CellStyle.ALIGN_CENTER_SELECTION);//水平居中
//          titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
//          //设置字体
//          XSSFFont titleFont=workbook.createFont();
//          titleFont.setFontHeightInPoints((short)15);
//          titleFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//粗体
//          titleStyle.setFont(titleFont);
//          sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headers.length-1));
//          //指定合并区域
//          Row rowHeader = sheet.createRow(0);
//          //XSSFRow rowHeader=sheet.createRow(0);
//          Cell cellHeader=rowHeader.createCell(0);
//          XSSFRichTextString textHeader=new XSSFRichTextString(title);
//          cellHeader.setCellStyle(titleStyle);
//          cellHeader.setCellValue(textHeader);
//         
//          Row row=sheet.createRow(1);
//          for(int i=0;i<headers.length;i++){
//              Cell cell=row.createCell(i);
//              cell.setCellStyle(style);
//              XSSFRichTextString text=new XSSFRichTextString(headers[i]);
//              cell.setCellValue(text);
//          }
//          //遍历集合数据,产生数据行
//          if(result!=null&&result.size()>0){
//              int index=2;
//              for(T t:result){
//                  row=sheet.createRow(index);
//                  index++;
//                  for(short i=0;i<columns.length;i++){
//                      Cell cell=row.createCell(i);
//                      String filedName=columns[i];
//                      String getMethodName="get"+filedName.substring(0,1).toUpperCase()
//                              +filedName.substring(1);
//                      Class tCls=t.getClass();
//                      Method getMethod=tCls.getMethod(getMethodName,new Class[]{});
//                      Object value=getMethod.invoke(t, new Class[]{});
//                      String textValue=null;
//                      if(value==null){
//                          textValue="";
//                      }else if(value instanceof Date){
//                          Date date=(Date)value;
//                          SimpleDateFormat sdf = new SimpleDateFormat(pattern);
//                          textValue = sdf.format(date);
//                      }else if(value instanceof byte[]){
//                          row.setHeightInPoints(80);
//                          sheet.setColumnWidth(i, 35*100);
//                          byte[] bsValue=(byte[])value;
//                          XSSFClientAnchor anchor=new XSSFClientAnchor(0,0,1023,255,6,index,6,index);
//                          anchor.setAnchorType(2);
//                          drawing.createPicture(anchor, workbook.addPicture(bsValue, XSSFWorkbook.PICTURE_TYPE_JPEG));
//                      }else{
//                          // 其它数据类型都当作字符串简单处理
//                          textValue=value.toString();
//                      }
//                     
//                      if(textValue!=null){
//                          Pattern p = Pattern.compile("^//d+(//.//d+)?$");
//                          Matcher matcher = p.matcher(textValue);
//                          if (matcher.matches()) {
//                              // 是数字当作double处理
//                              cell.setCellValue(Double.parseDouble(textValue));
//                          } else {
//                              XSSFRichTextString richString = new XSSFRichTextString(
//                                      textValue);
//                              // HSSFFont font3 = workbook.createFont();
//                              // font3.setColor(HSSFColor.BLUE.index);
//                              // richString.applyFont(font3);
//                              cell.setCellValue(richString);
//                          }
//                      }
//                     
//                  }
//              }
//          }
//          workbook.write(out);
 
 
             
//  }
     
    /**
     * 导出excel工具类
     * @title expoortExcelx
     * @param title sheet名称
     * @param headers 表头
     * @param columns 列
     * @param list 数据
     * @param out
     * @param pattern
     * @throws NoSuchMethodException
     * @throws Exception
     * @description
     */
    public void expoortExcelx(String title, String[] headers, String[] columns,
            List<T> list, OutputStream out, String pattern) throws NoSuchMethodException, Exception{
            //创建工作薄
            XSSFWorkbook workbook=new XSSFWorkbook();
            //创建表格
            Sheet sheet=workbook.createSheet("title");
            //设置默认宽度
            sheet.setDefaultColumnWidth(25);
            //创建样式
            XSSFCellStyle style=workbook.createCellStyle();
            //设置样式
            style.setFillForegroundColor(IndexedColors.GOLD.index);
            style.setFillPattern(CellStyle.SOLID_FOREGROUND);
            style.setBorderBottom(CellStyle.BORDER_THIN);
            style.setBorderLeft(CellStyle.BORDER_THIN);
            style.setBorderRight(CellStyle.BORDER_THIN);
            style.setBorderTop(CellStyle.BORDER_THIN);
            //生成字体
            XSSFFont font=workbook.createFont();
            font.setColor(IndexedColors.VIOLET.index);
            font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
            //应用字体
            style.setFont(font);
             
            //自动换行
            style.setWrapText(true);
            //声明一个画图的顶级管理器
            Drawing drawing=(XSSFDrawing) sheet.createDrawingPatriarch();
            //表头的样式
            XSSFCellStyle titleStyle=workbook.createCellStyle();//样式对象
            titleStyle.setAlignment(CellStyle.ALIGN_CENTER_SELECTION);//水平居中
            titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
            //设置字体
            XSSFFont titleFont=workbook.createFont();
            titleFont.setFontHeightInPoints((short)15);
            titleFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//粗体
            titleStyle.setFont(titleFont);
            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headers.length-1));
            //指定合并区域
            Row rowHeader = sheet.createRow(0);
            //XSSFRow rowHeader=sheet.createRow(0);
            Cell cellHeader=rowHeader.createCell(0);
            XSSFRichTextString textHeader=new XSSFRichTextString(title);
            cellHeader.setCellStyle(titleStyle);
            cellHeader.setCellValue(textHeader);
             
            Row row=sheet.createRow(1);
            for(int i=0;i<headers.length;i++){
                Cell cell=row.createCell(i);
                cell.setCellStyle(style);
                XSSFRichTextString text=new XSSFRichTextString(headers[i]);
                cell.setCellValue(text);
            }
            //遍历集合数据,产生数据行
            if(list!=null&&list.size()>0){
                int index=2;
                for(T t:list){
                    row=sheet.createRow(index);
                    index++;
                    for(short i=0;i<columns.length;i++){
                        Cell cell=row.createCell(i);
                        String filedName=columns[i];
                        String getMethodName="get"+filedName.substring(0,1).toUpperCase()
                                +filedName.substring(1);
                        Class tCls=t.getClass();
                        Method getMethod=tCls.getMethod(getMethodName,new Class[]{});
                        Object value=getMethod.invoke(t, new Class[]{});
                        String textValue=null;
                        if(value==null){
                            textValue="";
                        }else if(value instanceof Date){
                            Date date=(Date)value;
                            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                            textValue = sdf.format(date);
                        }else if(value instanceof byte[]){
                            row.setHeightInPoints(80);
                            sheet.setColumnWidth(i, 35*100);
                            byte[] bsValue=(byte[])value;
                            XSSFClientAnchor anchor=new XSSFClientAnchor(0,0,1023,255,6,index,6,index);
                            anchor.setAnchorType(2);
                            drawing.createPicture(anchor, workbook.addPicture(bsValue, XSSFWorkbook.PICTURE_TYPE_JPEG));
                        }else{
                            // 其它数据类型都当作字符串简单处理
                            textValue=value.toString();
                        }
                         
                        if(textValue!=null){
                            Pattern p = Pattern.compile("^//d+(//.//d+)?$");
                            Matcher matcher = p.matcher(textValue);
                            if (matcher.matches()) {
                                // 是数字当作double处理
                                cell.setCellValue(Double.parseDouble(textValue));
                            } else {
                                XSSFRichTextString richString = new XSSFRichTextString(
                                        textValue);
                                // HSSFFont font3 = workbook.createFont();
                                // font3.setColor(HSSFColor.BLUE.index);
                                // richString.applyFont(font3);
                                cell.setCellValue(richString);
                            }
                        }
                         
                    }
                }
            }
            workbook.write(out);
             
    }
    public void expoortExcelx1(String title, String[] headers, String[] columns,
            List<CallResult> list, OutputStream out, String pattern) throws NoSuchMethodException, Exception{
            //创建工作薄
            XSSFWorkbook workbook=new XSSFWorkbook();
            //创建表格
            Sheet sheet=workbook.createSheet("title");
            //设置默认宽度
            sheet.setDefaultColumnWidth(25);
            //创建样式
            XSSFCellStyle style=workbook.createCellStyle();
            //设置样式
            style.setFillForegroundColor(IndexedColors.GOLD.index);
            style.setFillPattern(CellStyle.SOLID_FOREGROUND);
            style.setBorderBottom(CellStyle.BORDER_THIN);
            style.setBorderLeft(CellStyle.BORDER_THIN);
            style.setBorderRight(CellStyle.BORDER_THIN);
            style.setBorderTop(CellStyle.BORDER_THIN);
            //生成字体
            XSSFFont font=workbook.createFont();
            font.setColor(IndexedColors.VIOLET.index);
            font.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);
            //应用字体
            style.setFont(font);
             
            //自动换行
            style.setWrapText(true);
            //声明一个画图的顶级管理器
            Drawing drawing=(XSSFDrawing) sheet.createDrawingPatriarch();
            //表头的样式
            XSSFCellStyle titleStyle=workbook.createCellStyle();//样式对象
            titleStyle.setAlignment(CellStyle.ALIGN_CENTER_SELECTION);//水平居中
            titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
            //设置字体
            XSSFFont titleFont=workbook.createFont();
            titleFont.setFontHeightInPoints((short)15);
            titleFont.setBoldweight(XSSFFont.BOLDWEIGHT_BOLD);//粗体
            titleStyle.setFont(titleFont);
            sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headers.length-1));
            //指定合并区域
            Row rowHeader = sheet.createRow(0);
            //XSSFRow rowHeader=sheet.createRow(0);
            Cell cellHeader=rowHeader.createCell(0);
            XSSFRichTextString textHeader=new XSSFRichTextString(title);
            cellHeader.setCellStyle(titleStyle);
            cellHeader.setCellValue(textHeader);
             
            Row row=sheet.createRow(1);
            for(int i=0;i<headers.length;i++){
                Cell cell=row.createCell(i);
                cell.setCellStyle(style);
                XSSFRichTextString text=new XSSFRichTextString(headers[i]);
                cell.setCellValue(text);
            }
            //遍历集合数据,产生数据行
            if(list!=null&&list.size()>0){
                int index=2;
                for(CallResult t:list){
                    row=sheet.createRow(index);
                    index++;
                    for(short i=0;i<columns.length;i++){
                        Cell cell=row.createCell(i);
                        String filedName=columns[i];
                        String getMethodName="get"+filedName.substring(0,1).toUpperCase()
                                +filedName.substring(1);
                        Class tCls=t.getClass();
                        Method getMethod=tCls.getMethod(getMethodName,new Class[]{});
                        Object value=getMethod.invoke(t, new Class[]{});
                        String textValue=null;
                        if(value==null){
                            textValue="";
                        }else if(value instanceof Date){
                            Date date=(Date)value;
                            SimpleDateFormat sdf = new SimpleDateFormat(pattern);
                            textValue = sdf.format(date);
                        }else if(value instanceof byte[]){
                            row.setHeightInPoints(80);
                            sheet.setColumnWidth(i, 35*100);
                            byte[] bsValue=(byte[])value;
                            XSSFClientAnchor anchor=new XSSFClientAnchor(0,0,1023,255,6,index,6,index);
                            anchor.setAnchorType(2);
                            drawing.createPicture(anchor, workbook.addPicture(bsValue, XSSFWorkbook.PICTURE_TYPE_JPEG));
                        }else{
                            // 其它数据类型都当作字符串简单处理
                            textValue=value.toString();
                        }
                         
                        if(textValue!=null){
                            Pattern p = Pattern.compile("^//d+(//.//d+)?$");
                            Matcher matcher = p.matcher(textValue);
                            if (matcher.matches()) {
                                // 是数字当作double处理
                                cell.setCellValue(Double.parseDouble(textValue));
                            } else {
                                XSSFRichTextString richString = new XSSFRichTextString(
                                        textValue);
                                // HSSFFont font3 = workbook.createFont();
                                // font3.setColor(HSSFColor.BLUE.index);
                                // richString.applyFont(font3);
                                cell.setCellValue(richString);
                            }
                        }
                         
                    }
                }
            }
            workbook.write(out);
             
    }
}
原文地址:https://www.cnblogs.com/xuyatao/p/7324994.html