使用POI操作Excel,读取、写入Excel

来源:互联网 发布:短租房网站源码php 编辑:程序博客网 时间:2024/05/02 00:07
package com.ucf.boss.utils;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.math.BigDecimal;import java.text.DecimalFormat;import java.text.NumberFormat;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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.ss.usermodel.Font;import org.apache.poi.ss.usermodel.HorizontalAlignment;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.VerticalAlignment;import org.apache.poi.ss.usermodel.Workbook;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.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;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class PoiUtils {  private static final Logger LOGGER = LoggerFactory      .getLogger(PoiUtils.class);   /* LONG */  protected static final String LONG = "java.lang.Long";  /* SHORT */  protected static final String SHORT = "java.lang.Short";  /* INT */  protected static final String INT = "java.lang.Integer";  /* STRING */  protected static final String STRING = "java.lang.String";  /* DATE */  protected static final String DATE = "java.sql.Timestamp";  /* BIG */  protected static final String BIG = "java.math.BigDecimal";  /* CLOB */  protected static final String CLOB = "oracle.sql.CLOB";    public static void main(String[] args) throws FileNotFoundException {        String path ="C:/Program Files/feiq/AutoRecv Files/IP梳理记录表(1)(2).xlsx";    File file = new File(path);    InputStream inputStream = new FileInputStream(file);    int count = getRecordsCountReadStream(inputStream,1, false, 0);    System.out.print(count);  }      /**   * 通过文件路径获取Excel读取行数   * @param path 文件路径,只接受xls或xlsx结尾   * @param isHeader 是否表头   * @param headerCount 表头行数   * @return count 如果文件路径为空,返回0;   */  public static int getRecordsCountReadPath(String path, boolean isHeader, int headerCount) {        int count = 0;        if(path == null){      return count;    }else if(!path.endsWith("xls") && !path.endsWith("xlsx")        && !path.endsWith("XLS") && !path.endsWith("XLSX")){      return count;    }        try {      File file = new File(path);      InputStream inputStream = new FileInputStream(file);      Workbook hwb = null;      if(path.endsWith("xls") || path.endsWith("XLS")){        hwb = new HSSFWorkbook(inputStream);      }else if(path.endsWith("xlsx") || path.endsWith("XLSX")){        hwb = new XSSFWorkbook(inputStream);      }            if (null==hwb) {        return count;      }            Sheet sheet = hwb.getSheetAt(0);//暂定只取首页签      int begin = sheet.getFirstRowNum();      if(isHeader){        begin += headerCount;      }      int end = sheet.getLastRowNum();       for (int i = begin; i <= end; i++) {          if (null == sheet.getRow(i)) {            continue;          }          count++;        }            } catch (FileNotFoundException e) {        LOGGER.error("excel解析:", e);      return 0;    } catch (IOException e) {        LOGGER.error("excel解析:", e);      return 0;    }    return count;  }    /**   * 通过文件流获取Excel读取行数   * @param path 文件路径   * @param type 类型,0为xls,1为xlsx;   * @param isHeader 是否表头   * @param headerCount 表头行数   * @return count 如果文件路径为空,返回0;   */  public static int getRecordsCountReadStream(InputStream inputStream,int type, boolean isHeader, int headerCount) {          int count = 0;    if(type != 0 && type != 1){      return count;    }        try {      Workbook hwb = null;      if(type == 0){        hwb = new HSSFWorkbook(inputStream);       }else if(type == 1) {        hwb = new XSSFWorkbook(inputStream);      }            if (null==hwb) {        return count;      }            Sheet sheet = hwb.getSheetAt(0);      int begin = sheet.getFirstRowNum();       if(isHeader){        begin += headerCount;      }      int end = sheet.getLastRowNum();       for (int i = begin; i <= end; i++) {          if (null == sheet.getRow(i)) {            continue;          }          count++;        }      } catch (FileNotFoundException e) {        LOGGER.error("excel解析:", e);      return 0;    } catch (IOException e) {        LOGGER.error("excel解析:", e);      return 0;    }    return count;  }    /**   * 通过文件流获取Excel读取   * @param path 文件路径   * @param type 类型,0为xls,1为xlsx;   * @param isHeader 是否表头   * @param headerCount 表头行数   * @return poiList 如果文件路径为空,返回0;   */  public static List<String[]> readRecordsInputStream(InputStream inputStream, int type, boolean isHeader, int headerCount) {    List<String[]> poiList = new ArrayList<String[]>();    if(type != 0 && type != 1){      return null;    }    if(type == 0){      poiList = readXLSRecords(inputStream, isHeader, headerCount);     }else if(type == 1) {      poiList = readXLSXRecords(inputStream, isHeader, headerCount);     }    return poiList;  }    /**   * 通过文件路径获取Excel读取   * @param path 文件路径,只接受xls或xlsx结尾   * @param isHeader 是否表头   * @param headerCount 表头行数   * @return count 如果文件路径为空,返回0;   */  public static List<String[]> readRecordsInputPath(String path, boolean isHeader, int headerCount) {    List<String[]> poiList = new ArrayList<String[]>();    if(path == null){      return null;    }else if(!path.endsWith("xls") && !path.endsWith("xlsx")        && !path.endsWith("XLS") && !path.endsWith("XLSX")){      return null;    }    File file = new File(path);    try {      InputStream inputStream = new FileInputStream(file);            if(path.endsWith("xls") || path.endsWith("XLS")){        poiList = readXLSRecords(inputStream, isHeader, headerCount);       }else if(path.endsWith("xlsx") || path.endsWith("XLSX")){        poiList = readXLSXRecords(inputStream, isHeader, headerCount);       }    } catch (Exception e) {        LOGGER.error("excel解析:", e);      return null;    }    return poiList;  }    /**   * 解析EXCEL2003文件流   * 如果一行记录的行中或行尾出现空格,POI工具类可能会跳过空格不做处理,所以默认第一行是表头,所有待解析的记录都以表头为准   * @param inputStream  输入流   * @param isHeader  是否要跳过表头   * @param headerCount  表头占用行数   * @return 返回一个字符串数组List   */  public static List<String[]> readXLSRecords(InputStream inputStream, boolean isHeader, int headerCount) {       List<String[]> poiList = new ArrayList<String[]>();       try{         HSSFWorkbook wbs = new HSSFWorkbook(inputStream);         HSSFSheet childSheet = wbs.getSheetAt(0);         //获取表头         int begin = childSheet.getFirstRowNum();          HSSFRow firstRow = childSheet.getRow(begin);         int cellTotal = firstRow.getPhysicalNumberOfCells();         //是否跳过表头解析数据         if(isHeader){          begin += headerCount;         }         //逐行获取单元格数据         for(int i = begin;i <= childSheet.getLastRowNum();i++){           HSSFRow row = childSheet.getRow(i); //一行的所有单元格格式都是常规的情况下,返回的row为null           if(null != row){             String[] cells = new String[cellTotal];             for(int k=0;k<cellTotal;k++){               HSSFCell cell = row.getCell(k);               cells[k] = getStringXLSCellValue(cell);             }             poiList.add(cells);            }         }       }catch(Exception e){         LOGGER.error("excel解析:", e);         return null;       }       return poiList;    }    /**   * 解析EXCEL2003文件流   * 如果一行记录的行中或行尾出现空格,POI工具类可能会跳过空格不做处理,所以默认第一行是表头,所有待解析的记录都以表头为准   * 该解析方法只适用于表头占用一行的情况   * @param inputStream  输入流   * @param isHeader  是否要跳过表头   * @param headerCount  表头占用行数   * @param maxColNum  最大列数,适用于多表头   * @return 返回一个字符串数组List   */  public static List<String[]> readXLSRecords(InputStream inputStream, boolean isHeader, int headerCount, int maxColNum) {       List<String[]> poiList = new ArrayList<String[]>();       try{         HSSFWorkbook wbs = new HSSFWorkbook(inputStream);         HSSFSheet childSheet = wbs.getSheetAt(0);         //获取表头         int begin = childSheet.getFirstRowNum();          //HSSFRow firstRow = childSheet.getRow(begin);         //int cellTotal = firstRow.getPhysicalNumberOfCells();         //是否跳过表头解析数据         if(isHeader){          begin += headerCount;         }         //逐行获取单元格数据         for(int i = begin;i <= childSheet.getLastRowNum();i++){           HSSFRow row = childSheet.getRow(i); //一行的所有单元格格式都是常规的情况下,返回的row为null           String[] cells = new String[maxColNum]; //空行对应空串数组           for(int k=0;k<maxColNum;k++){             HSSFCell cell = row==null?null:row.getCell(k);             cells[k] = getStringXLSCellValue(cell);           }           poiList.add(cells);          }       }catch(Exception e){         LOGGER.error("excel解析:", e);         return null;       }       return poiList;    }    /**   * 解析EXCEL2007文件流   * 如果一行记录的行中或行尾出现空格,POI工具类可能会跳过空格不做处理,所以默认第一行是表头,所有待解析的记录都以表头为准   * 该处理方法中,表头对应都占用一行   * @param inputStream 输入流   * @param isHeader 是否要跳过表头   * @param headerCount 表头占用行数   * @return 返回一个字符串数组List   */  public static List<String[]> readXLSXRecords(InputStream inputStream, boolean isHeader, int headerCount) {       List<String[]> poiList = new ArrayList<String[]>();       try{         XSSFWorkbook wbs = new XSSFWorkbook(inputStream);         XSSFSheet childSheet = wbs.getSheetAt(0);         //获取表头         int begin = childSheet.getFirstRowNum();          XSSFRow firstRow = childSheet.getRow(begin);         int cellTotal = firstRow.getPhysicalNumberOfCells();         //是否跳过表头解析数据         if(isHeader){          begin += headerCount;         }         for(int i = begin;i <= childSheet.getLastRowNum();i++){           XSSFRow row = childSheet.getRow(i);  //一行的所有单元格格式都是常规的情况下,返回的row为null           if(null != row){             String[] cells = new String[cellTotal];             for(int k=0;k<cellTotal;k++){               XSSFCell cell = row.getCell(k);               cells[k] = getStringXLSXCellValue(cell);             }             poiList.add(cells);           }         }       }catch(Exception e){         LOGGER.error("excel解析:", e);         return null;       }       return poiList;    }    /**   * 解析EXCEL2007文件流   * 如果一行记录的行中或行尾出现空格,POI工具类可能会跳过空格不做处理,所以默认第一行是表头,所有待解析的记录都以表头为准   * 该处理方法中,表头对应都占用一行   * @param inputStream 输入流   * @param isHeader 是否要跳过表头   * @param headerCount 表头占用行数   * @param maxColNum 最大列数,适用于多表头的情况   * @return 返回一个字符串数组List   */  public static List<String[]> readXLSXRecords(InputStream inputStream, boolean isHeader, int headerCount, int maxColNum) {       List<String[]> poiList = new ArrayList<String[]>();       try{         XSSFWorkbook wbs = new XSSFWorkbook(inputStream);         XSSFSheet childSheet = wbs.getSheetAt(0);         //获取表头         int begin = childSheet.getFirstRowNum();          //XSSFRow firstRow = childSheet.getRow(begin);         //int cellTotal = firstRow.getPhysicalNumberOfCells();         //是否跳过表头解析数据         if(isHeader){          begin += headerCount;         }         for(int i = begin;i <= childSheet.getLastRowNum();i++){           XSSFRow row = childSheet.getRow(i);  //一行的所有单元格格式都是常规的情况下,返回的row为null           String[] cells = new String[maxColNum];  //空行对应空串数组           for(int k=0;k<maxColNum;k++){             XSSFCell cell = row==null?null:row.getCell(k);             cells[k] = getStringXLSXCellValue(cell);           }           poiList.add(cells);         }       }catch(Exception e){         LOGGER.error("excel解析:", e);         return null;       }       return poiList;    }     /**    * 获取单元格数据内容为字符串类型的数据    *     * @param cell Excel单元格    * @return String 单元格数据内容    */    private static String getStringXLSCellValue(HSSFCell cell) {      String strCell = "";      if (cell == null) {        return "";      }            //将数值型参数转成文本格式,该算法不能保证1.00这种类型数值的精确度      DecimalFormat df = (DecimalFormat) NumberFormat.getPercentInstance();        StringBuffer sb = new StringBuffer();      sb.append("0");      df.applyPattern(sb.toString());              switch (cell.getCellType()) {      case HSSFCell.CELL_TYPE_STRING:        strCell = cell.getStringCellValue();        break;      case HSSFCell.CELL_TYPE_NUMERIC:        double value = cell.getNumericCellValue();        while(Double.parseDouble(df.format(value))!=value){          if("0".equals(sb.toString())){            sb.append(".0");          }else{            sb.append("0");          }          df.applyPattern(sb.toString());        }        strCell = df.format(value);        break;      case HSSFCell.CELL_TYPE_BOOLEAN:        strCell = String.valueOf(cell.getBooleanCellValue());        break;      case HSSFCell.CELL_TYPE_BLANK:        strCell = "";        break;      default:        strCell = "";        break;      }      if (strCell == null || "".equals(strCell)) {        return "";      }      return strCell;    }         /**      * 获取单元格数据内容为字符串类型的数据      *       * @param cell Excel单元格      * @return String 单元格数据内容      */      private static String getStringXLSXCellValue(XSSFCell cell) {        String strCell = "";        if (cell == null) {          return "";        }        //将数值型参数转成文本格式,该算法不能保证1.00这种类型数值的精确度        DecimalFormat df = (DecimalFormat) NumberFormat.getPercentInstance();          StringBuffer sb = new StringBuffer();        sb.append("0");        df.applyPattern(sb.toString());                 switch (cell.getCellType()) {        case XSSFCell.CELL_TYPE_STRING:          strCell = cell.getStringCellValue();          break;        case XSSFCell.CELL_TYPE_NUMERIC:          double value = cell.getNumericCellValue();          while(Double.parseDouble(df.format(value))!=value){            if("0".equals(sb.toString())){              sb.append(".0");            }else{              sb.append("0");            }            df.applyPattern(sb.toString());          }          strCell = df.format(value);          break;        case XSSFCell.CELL_TYPE_BOOLEAN:          strCell = String.valueOf(cell.getBooleanCellValue());          break;        case XSSFCell.CELL_TYPE_BLANK:          strCell = "";          break;        default:          strCell = "";          break;        }        if (strCell == null || "".equals(strCell)) {          return "";        }        return strCell;      }                  /**       * 导出Excel       * @param response       * @param request       * @param title        * @param map key为标题,list为数据,单表头导出       * @param type 0为xls,1为xlsx       */      public static void output(HttpServletResponse response,HttpServletRequest request,          String title,Map<String, List<Object>> map, int type) throws Exception{                if(type != 0 && type != 1){          throw new Exception("无效的excel导出类型,type=0表示xls,type=1表示xlsx");        }        List<Map<String, List<Object>>> list = new ArrayList<Map<String, List<Object>>>();        list.add(map);        if(type == 0){          outputXLS(response, request, title, list);         }else if(type == 1) {          outputXLSX(response, request, title, list);         }      }             /**       * 导出Excel       * @param response       * @param request       * @param title        * @param List<Map> 支持多表头导出       * @param type 0为xls,1为xlsx       */      public static void output(HttpServletResponse response,HttpServletRequest request,          String title, List<Map<String, List<Object>>> list, int type) throws Exception{                if(type != 0 && type != 1){          throw new Exception("无效的excel导出类型,type=0表示xls,type=1表示xlsx");        }        if(type == 0){          outputXLS(response, request, title, list);         }else if(type == 1) {          outputXLSX(response, request, title, list);         }      }             /**       * 导出Excel       * @param response       * @param request       * @param title        * @param List<Map> 支持多表头按顺序导出       * @param type 0为xls,1为xlsx       */      public static void outputByColId(HttpServletResponse response,HttpServletRequest request,          String title, List<Map<String, List<Object>>> list, int type) throws Exception{                if(type != 0 && type != 1){          throw new Exception("无效的excel导出类型,type=0表示xls,type=1表示xlsx");        }        if(type == 0){          outputXLSByCol(response, request, title, list);        }else if(type == 1) {          outputXLSByCol(response, request, title, list);        }      }                  public static void outputXLS(HttpServletResponse response,HttpServletRequest request,          String title,List<Map<String, List<Object>>> list)throws Exception{                    //输出流定义          OutputStream os = response.getOutputStream();          byte[] fileNameByte = (title + ".xls").getBytes("GBK");          String filename = new String(fileNameByte, "ISO8859-1");          response.setContentType("application/x-msdownload");          response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + filename);                    //创建excel文件          HSSFWorkbook hssf_w_book=new HSSFWorkbook();          HSSFSheet hssf_w_sheet=hssf_w_book.createSheet(title);          hssf_w_sheet.setDefaultColumnWidth(21); //固定列宽度          HSSFRow hssf_w_row=null;//创建一行          HSSFCell hssf_w_cell=null;//创建每个单元格                     //定义表头单元格样式          HSSFCellStyle head_cellStyle = hssf_w_book.createCellStyle();          //定义表头字体样式          HSSFFont head_font = hssf_w_book.createFont();          head_font.setFontName("宋体");//设置头部字体为宋体          head_font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体          head_font.setFontHeightInPoints((short) 10); //字体大小          //表头单元格样式设置          head_cellStyle.setFont(head_font);//单元格样式使用字体          head_cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);          head_cellStyle.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER);//head_cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);//head_cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//head_cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//head_cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);                    //定义数据单元格样式          HSSFCellStyle cellStyle_CN = hssf_w_book.createCellStyle();//创建数据单元格样式(数据库数据样式)//cellStyle_CN.setBorderBottom(XSSFCellStyle.BORDER_THIN);//cellStyle_CN.setBorderLeft(XSSFCellStyle.BORDER_THIN);//cellStyle_CN.setBorderRight(XSSFCellStyle.BORDER_THIN);//cellStyle_CN.setBorderTop(XSSFCellStyle.BORDER_THIN);                      //在多表头导出时,定义第一个表头出现位置          int titleFlag = 0;                    //遍历写入表数据的list          for(Map<String, List<Object>> map : list){            //遍历map获取表头字段,并将表头字段放进String型的数组            Set<String> key = map.keySet();            String titles = "";            int count = 0;            for (Iterator<String> it = key.iterator(); it.hasNext();) {              if(count != 0){                titles += ";";              }              titles += (String) it.next();              count++;            }            String[] titleArray = titles.split(";");                        //表头写入位置            hssf_w_row = hssf_w_sheet.createRow(titleFlag);            for(int i = 0; i < titleArray.length; i++){              hssf_w_cell = hssf_w_row.createCell(i);              hssf_w_cell.setCellType(XSSFCell.CELL_TYPE_STRING);              hssf_w_cell.setCellValue(titleArray[i]);              hssf_w_cell.setCellStyle(head_cellStyle);              //hssf_w_sheet.autoSizeColumn(( short ) i );             }                        //循环写入表数据,获取表的总列数,然后逐行写入数据            for(int i = 0; i < map.get(titleArray[0]).size(); i++){              //定义数据行              hssf_w_row = hssf_w_sheet.createRow(i+titleFlag+1);              //按行将每一列的数据写入单元格              for(int j = 0; j < titleArray.length; j++){                hssf_w_cell = hssf_w_row.createCell(j);                Object in = map.get(titleArray[j]).get(i);                type4ExcelXLS(in,hssf_w_cell,cellStyle_CN);                //hssf_w_sheet.autoSizeColumn(( short ) i );               }            }            //下一个表头的写入位置,和上一个表头数据之间隔一行            titleFlag+=map.get(titleArray[0]).size()+2;          }                    //excel文件导出          hssf_w_book.write(os);          os.close();          request.getSession().setAttribute("EXCEL_FINISH", "1");      }            public static void outputXLSByCol(HttpServletResponse response,HttpServletRequest request,          String title,List<Map<String, List<Object>>> list)throws Exception{                    //输出流定义          OutputStream os = response.getOutputStream();          byte[] fileNameByte = (title + ".xls").getBytes("GBK");          String filename = new String(fileNameByte, "ISO8859-1");          response.setContentType("application/x-msdownload");          response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + filename);                    //创建excel文件          HSSFWorkbook hssf_w_book=new HSSFWorkbook();          HSSFSheet hssf_w_sheet=hssf_w_book.createSheet(title);          hssf_w_sheet.setDefaultColumnWidth(21); //固定列宽度          HSSFRow hssf_w_row=null;//创建一行          HSSFCell hssf_w_cell=null;//创建每个单元格                     //定义表头单元格样式          HSSFCellStyle head_cellStyle = hssf_w_book.createCellStyle();          //定义表头字体样式          HSSFFont head_font = hssf_w_book.createFont();          head_font.setFontName("宋体");//设置头部字体为宋体          head_font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体          head_font.setFontHeightInPoints((short) 10); //字体大小          //表头单元格样式设置          head_cellStyle.setFont(head_font);//单元格样式使用字体          head_cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);          head_cellStyle.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER);//head_cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);//head_cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);//head_cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);//head_cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);                    //定义数据单元格样式          HSSFCellStyle cellStyle_CN = hssf_w_book.createCellStyle();//创建数据单元格样式(数据库数据样式)//cellStyle_CN.setBorderBottom(XSSFCellStyle.BORDER_THIN);//cellStyle_CN.setBorderLeft(XSSFCellStyle.BORDER_THIN);//cellStyle_CN.setBorderRight(XSSFCellStyle.BORDER_THIN);//cellStyle_CN.setBorderTop(XSSFCellStyle.BORDER_THIN);                      //在多表头导出时,定义第一个表头出现位置          int titleFlag = 0;                    //遍历写入表数据的list          for(Map<String, List<Object>> map : list){            //遍历map获取表头字段,并将表头字段放进String型的数组            Set<String> key = map.keySet();            String titles = "";            int count = 0;            for (Iterator<String> it = key.iterator(); it.hasNext();) {              if(count != 0){                titles += ";";              }              titles += (String) it.next();              count++;            }            String[] titleArray = titles.split(";");            String[] temArr = new String[titleArray.length];            String[] temCol = new String[titleArray.length];            for(int k = 0;k<titleArray.length;k++){              String tem = titleArray[k];              String[] t= tem.split("_");              String c = t[1];              int n = Integer.parseInt(c);              temArr[n] = t[0]+"_"+c;              temCol[n] = t[0];            }                        //表头写入位置            hssf_w_row = hssf_w_sheet.createRow(titleFlag);            for(int i = 0; i < temArr.length; i++){              hssf_w_cell = hssf_w_row.createCell(i);              hssf_w_cell.setCellType(XSSFCell.CELL_TYPE_STRING);              hssf_w_cell.setCellValue(temCol[i]);              hssf_w_cell.setCellStyle(head_cellStyle);              //hssf_w_sheet.autoSizeColumn(( short ) i );             }                        //循环写入表数据,获取表的总列数,然后逐行写入数据            for(int i = 0; i < map.get(temArr[0]).size(); i++){              //定义数据行              hssf_w_row = hssf_w_sheet.createRow(i+titleFlag+1);              //按行将每一列的数据写入单元格              for(int j = 0; j < temArr.length; j++){                hssf_w_cell = hssf_w_row.createCell(j);                Object in = map.get(temArr[j]).get(i);                type4ExcelXLS(in,hssf_w_cell,cellStyle_CN);                //hssf_w_sheet.autoSizeColumn(( short ) i );               }            }            //下一个表头的写入位置,和上一个表头数据之间隔一行            titleFlag+=map.get(temArr[0]).size()+2;          }                    //excel文件导出          hssf_w_book.write(os);          os.close();          request.getSession().setAttribute("EXCEL_FINISH", "1");      }            public static void outputXLSX(HttpServletResponse response,HttpServletRequest request,          String title,List<Map<String, List<Object>>> list) throws Exception{                    //输出流定义          OutputStream os = response.getOutputStream();          byte[] fileNameByte = (title + ".xlsx").getBytes("GBK");          String filename = new String(fileNameByte, "ISO8859-1");          response.setContentType("application/x-msdownload");          response.setCharacterEncoding("UTF-8");          response.setHeader("Content-Disposition", "attachment;filename=" + filename);                    //创建excel文件          XSSFWorkbook xssf_w_book=new XSSFWorkbook();          XSSFSheet xssf_w_sheet=xssf_w_book.createSheet(title);          xssf_w_sheet.setDefaultColumnWidth(21); //固定列宽度          XSSFRow xssf_w_row=null;//创建一行          XSSFCell xssf_w_cell=null;//创建每个单元格                     //定义表头单元格样式          XSSFCellStyle head_cellStyle=xssf_w_book.createCellStyle();          //定义表头字体样式          XSSFFont  head_font=xssf_w_book.createFont();          head_font.setFontName("宋体");//设置头部字体为宋体          head_font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体          head_font.setFontHeightInPoints((short) 10);          //表头单元格样式设置          head_cellStyle.setFont(head_font);//单元格使用表头字体样式          head_cellStyle.setAlignment(HorizontalAlignment.CENTER);          head_cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);          head_cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);          head_cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);          head_cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);          head_cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);                    //定义数据单元格样式          XSSFCellStyle cellStyle_CN=xssf_w_book.createCellStyle();//创建数据单元格样式(数据库数据样式)          cellStyle_CN.setBorderBottom(XSSFCellStyle.BORDER_THIN);          cellStyle_CN.setBorderLeft(XSSFCellStyle.BORDER_THIN);          cellStyle_CN.setBorderRight(XSSFCellStyle.BORDER_THIN);          cellStyle_CN.setBorderTop(XSSFCellStyle.BORDER_THIN);                      //在多表头导出时,定义第一个表头出现位置          int titleFlag = 0;                    //遍历写入表数据的list          for(Map<String, List<Object>> map : list){            //遍历map获取表头字段,并将表头字段放进String型的数组            Set<String> key = map.keySet();            String titles = "";            int count = 0;            for (Iterator<String> it = key.iterator(); it.hasNext();) {              if(count != 0){                titles += ";";              }              titles += (String) it.next();              count++;            }            String[] titleArray = titles.split(";");                        //第一行写入表头            xssf_w_row=xssf_w_sheet.createRow(titleFlag);            for(int i = 0; i < titleArray.length; i++){              xssf_w_cell = xssf_w_row.createCell(i);              xssf_w_cell.setCellType(XSSFCell.CELL_TYPE_STRING);              xssf_w_cell.setCellValue(titleArray[i]);              xssf_w_cell.setCellStyle(head_cellStyle);              //xssf_w_sheet.autoSizeColumn(( short ) i );             }                        //循环写入表数据            for(int i = 0; i < map.get(titleArray[0]).size(); i++){              //定义数据行              xssf_w_row=xssf_w_sheet.createRow(i+titleFlag+1);              for(int j = 0; j < titleArray.length; j++){                xssf_w_cell = xssf_w_row.createCell(j);                Object in = map.get(titleArray[j]).get(i);                type4ExcelXLSX(in,xssf_w_cell,cellStyle_CN);                //xssf_w_sheet.autoSizeColumn(( short ) i );               }            }                        //下一个表头的写入位置,和上一个表头数据之间隔一行            titleFlag+=map.get(titleArray[0]).size()+2;          }                    //excel文件导出          xssf_w_book.write(os);          os.close();          request.getSession().setAttribute("EXCEL_FINISH", "1");      }                   /**     * 导出Excel     * @param response     * @param request     * @param title      * @param map key为标题,list为数据,统计信息在一行     * @param map key为标题,list为数据,表数据     * @param type 0为xls,1为xlsx     * @param add null不加结尾说明,非null时表示添加结尾说明     */    public static void output(HttpServletResponse response,HttpServletRequest request,        String title, Map<String, List<Object>> mapTitle, Map<String, List<Object>> map, int type, String add) throws Exception{            if(type != 0 && type != 1){        throw new Exception("无效的excel导出类型,type=0表示xls,type=1表示xlsx");      }      List<Map<String, List<Object>>> listTitle = new ArrayList<Map<String, List<Object>>>();      if (null!=mapTitle)      listTitle.add(mapTitle);      List<Map<String, List<Object>>> list = new ArrayList<Map<String, List<Object>>>();      list.add(map);      if(type == 0){        outputXLS(response, request, title, listTitle, list, add);       }else if(type == 1) {        outputXLSX(response, request, title, listTitle, list, add);       }    }        public static void outputXLS(HttpServletResponse response,HttpServletRequest request,        String title,List<Map<String, List<Object>>> listTitle,List<Map<String, List<Object>>> list, String add)throws Exception{                //输出流定义        OutputStream os = response.getOutputStream();        byte[] fileNameByte = (title + ".xls").getBytes("GBK");        String filename = new String(fileNameByte, "ISO8859-1");        response.setContentType("application/x-msdownload");        response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + filename);                //创建excel文件        HSSFWorkbook hssf_w_book=new HSSFWorkbook();        HSSFSheet hssf_w_sheet=hssf_w_book.createSheet(title);        hssf_w_sheet.setDefaultColumnWidth(21); //固定列宽度        HSSFRow hssf_w_row=null;//创建一行        HSSFCell hssf_w_cell=null;//创建每个单元格                 //定义表头单元格样式        HSSFCellStyle head_cellStyle = hssf_w_book.createCellStyle();        //定义表头字体样式        HSSFFont head_font = hssf_w_book.createFont();        head_font.setFontName("宋体");//设置头部字体为宋体        head_font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体        head_font.setFontHeightInPoints((short) 10); //字体大小        //表头单元格样式设置        head_cellStyle.setFont(head_font);//单元格样式使用字体        head_cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);        head_cellStyle.setVerticalAlignment(HSSFCellStyle.ALIGN_CENTER);        head_cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);        head_cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);        head_cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);        head_cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);                //定义数据单元格样式        HSSFCellStyle cellStyle_CN = hssf_w_book.createCellStyle();//创建数据单元格样式(数据库数据样式)        cellStyle_CN.setBorderBottom(XSSFCellStyle.BORDER_THIN);        cellStyle_CN.setBorderLeft(XSSFCellStyle.BORDER_THIN);        cellStyle_CN.setBorderRight(XSSFCellStyle.BORDER_THIN);        cellStyle_CN.setBorderTop(XSSFCellStyle.BORDER_THIN);                  //在多表头导出时,定义第一个表头出现位置        int titleFlag = 0;                List<List<Map<String, List<Object>>>> listDatas = new ArrayList<List<Map<String, List<Object>>>>();        if (null!=listTitle)          listDatas.add(listTitle);        listDatas.add(list);                for (List<Map<String, List<Object>>> listData : listDatas) {                  //遍历写入表数据的list          for(Map<String, List<Object>> map : listData){            //遍历map获取表头字段,并将表头字段放进String型的数组            Set<String> key = map.keySet();            String titles = "";            int count = 0;            for (Iterator<String> it = key.iterator(); it.hasNext();) {              if(count != 0){                titles += ";";              }              titles += (String) it.next();              count++;            }            String[] titleArray = titles.split(";");                        //表头写入位置            hssf_w_row = hssf_w_sheet.createRow(titleFlag);            for(int i = 0; i < titleArray.length; i++){              hssf_w_cell = hssf_w_row.createCell(i);              hssf_w_cell.setCellType(XSSFCell.CELL_TYPE_STRING);              hssf_w_cell.setCellValue(titleArray[i]);              hssf_w_cell.setCellStyle(head_cellStyle);              //hssf_w_sheet.autoSizeColumn(( short ) i );             }                        //循环写入表数据,获取表的总列数,然后逐行写入数据            for(int i = 0; i < map.get(titleArray[0]).size(); i++){              //定义数据行              hssf_w_row = hssf_w_sheet.createRow(i+titleFlag+1);              //按行将每一列的数据写入单元格              for(int j = 0; j < titleArray.length; j++){                hssf_w_cell = hssf_w_row.createCell(j);                Object in = map.get(titleArray[j]).get(i);                type4ExcelXLS(in,hssf_w_cell,cellStyle_CN);                //hssf_w_sheet.autoSizeColumn(( short ) i );               }            }            //下一个表头的写入位置,和上一个表头数据之间隔一行            titleFlag+=map.get(titleArray[0]).size()+1;          }        }                if (null!=add) {          //定义表头单元格样式          HSSFCellStyle head_cellStyle2 = hssf_w_book.createCellStyle();          //表头单元格样式设置          head_cellStyle2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);          head_cellStyle2.setAlignment(HSSFCellStyle.ALIGN_LEFT);          head_cellStyle2.setWrapText(true);                    //定义表头字体样式          HSSFFont head_font2 = hssf_w_book.createFont();          head_font2.setFontName("宋体");//设置头部字体为宋体          head_font2.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体          head_font2.setFontHeightInPoints((short) 9); //字体大小          head_font2.setColor(Font.COLOR_RED);                    HSSFFont head_font3 = hssf_w_book.createFont();          head_font3.setFontName("宋体");//设置头部字体为宋体          head_font3.setFontHeightInPoints((short) 9); //字体大小          head_font3.setColor(Font.COLOR_RED);                    HSSFRichTextString ts= new HSSFRichTextString(add);          ts.applyFont(0,30,head_font2);          ts.applyFont(30,ts.length(),head_font3);                    titleFlag+=3;          hssf_w_row = hssf_w_sheet.createRow(titleFlag);          hssf_w_cell = hssf_w_row.createCell(0);          hssf_w_cell.setCellType(XSSFCell.CELL_TYPE_STRING);                    hssf_w_cell.setCellValue(ts);          hssf_w_cell.setCellStyle(head_cellStyle2);          hssf_w_sheet.addMergedRegion(new CellRangeAddress(titleFlag,titleFlag+8,0,4));        }        //excel文件导出        hssf_w_book.write(os);        os.close();    }        public static void outputXLSX(HttpServletResponse response,HttpServletRequest request,        String title,List<Map<String, List<Object>>> listTitle,List<Map<String, List<Object>>> list, String add) throws Exception{                //输出流定义        OutputStream os = response.getOutputStream();        byte[] fileNameByte = (title + ".xlsx").getBytes("GBK");        String filename = new String(fileNameByte, "ISO8859-1");        response.setContentType("application/x-msdownload");        response.setCharacterEncoding("UTF-8");        response.setHeader("Content-Disposition", "attachment;filename=" + filename);                //创建excel文件        XSSFWorkbook xssf_w_book=new XSSFWorkbook();        XSSFSheet xssf_w_sheet=xssf_w_book.createSheet(title);        xssf_w_sheet.setDefaultColumnWidth(21); //固定列宽度        XSSFRow xssf_w_row=null;//创建一行        XSSFCell xssf_w_cell=null;//创建每个单元格                 //定义表头单元格样式        XSSFCellStyle head_cellStyle=xssf_w_book.createCellStyle();        //定义表头字体样式        XSSFFont  head_font=xssf_w_book.createFont();        head_font.setFontName("宋体");//设置头部字体为宋体        head_font.setBoldweight(Font.BOLDWEIGHT_BOLD); //粗体        head_font.setFontHeightInPoints((short) 10);        //表头单元格样式设置        head_cellStyle.setFont(head_font);//单元格使用表头字体样式        head_cellStyle.setAlignment(HorizontalAlignment.CENTER);        head_cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);        head_cellStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);        head_cellStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);        head_cellStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);        head_cellStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);                //定义数据单元格样式        XSSFCellStyle cellStyle_CN=xssf_w_book.createCellStyle();//创建数据单元格样式(数据库数据样式)        cellStyle_CN.setBorderBottom(XSSFCellStyle.BORDER_THIN);        cellStyle_CN.setBorderLeft(XSSFCellStyle.BORDER_THIN);        cellStyle_CN.setBorderRight(XSSFCellStyle.BORDER_THIN);        cellStyle_CN.setBorderTop(XSSFCellStyle.BORDER_THIN);                  //在多表头导出时,定义第一个表头出现位置        int titleFlag = 0;                //遍历写入表数据的list        for(Map<String, List<Object>> map : list){          //遍历map获取表头字段,并将表头字段放进String型的数组          Set<String> key = map.keySet();          String titles = "";          int count = 0;          for (Iterator<String> it = key.iterator(); it.hasNext();) {            if(count != 0){              titles += ";";            }            titles += (String) it.next();            count++;          }          String[] titleArray = titles.split(";");                    //第一行写入表头          xssf_w_row=xssf_w_sheet.createRow(titleFlag);          for(int i = 0; i < titleArray.length; i++){            xssf_w_cell = xssf_w_row.createCell(i);            xssf_w_cell.setCellType(XSSFCell.CELL_TYPE_STRING);            xssf_w_cell.setCellValue(titleArray[i]);            xssf_w_cell.setCellStyle(head_cellStyle);            //xssf_w_sheet.autoSizeColumn(( short ) i );           }                    //循环写入表数据          for(int i = 0; i < map.get(titleArray[0]).size(); i++){            //定义数据行            xssf_w_row=xssf_w_sheet.createRow(i+titleFlag+1);            for(int j = 0; j < titleArray.length; j++){              xssf_w_cell = xssf_w_row.createCell(j);              Object in = map.get(titleArray[j]).get(i);              type4ExcelXLSX(in,xssf_w_cell,cellStyle_CN);              //xssf_w_sheet.autoSizeColumn(( short ) i );             }          }                    //下一个表头的写入位置,和上一个表头数据之间隔一行          titleFlag+=map.get(titleArray[0]).size()+2;        }        if (null!=add) {          titleFlag+=3;          xssf_w_row = xssf_w_sheet.createRow(titleFlag);          xssf_w_cell = xssf_w_row.createCell(0);          xssf_w_cell.setCellType(XSSFCell.CELL_TYPE_STRING);          xssf_w_cell.setCellValue(add);          xssf_w_cell.setCellStyle(head_cellStyle);          xssf_w_sheet.addMergedRegion(new CellRangeAddress(titleFlag,titleFlag+8,0,4));        }        //excel文件导出        xssf_w_book.write(os);        os.close();    }        /**     * 根据类型自适应格式     * @param col     * @param row     * @param in     * @return     * @throws Exception     */    public static void type4ExcelXLSX(Object in, XSSFCell cell, XSSFCellStyle style) throws Exception{      if (null == in){        cell.setCellType(XSSFCell.CELL_TYPE_STRING);        XSSFRichTextString xssfString = new XSSFRichTextString("");        cell.setCellValue(xssfString);        cell.setCellStyle(style);      }else{        in = ClobUtils.clobToString(in);        String type = in.getClass().getName();        if (INT.equals(type)){          cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);          cell.setCellValue(Double.parseDouble(String.valueOf(in)));          cell.setCellStyle(style);        }else if (LONG.equals(type) && String.valueOf(in).length() <= 11){          cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);          cell.setCellValue(Double.parseDouble(String.valueOf(in)));          cell.setCellStyle(style);        }else if (SHORT.equals(type)){          cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);          cell.setCellValue(Double.parseDouble(String.valueOf(in)));          cell.setCellStyle(style);        }else if (DATE.equals(type)) {          java.sql.Timestamp sqlDate = (java.sql.Timestamp)in;          Date d = new java.util.Date(sqlDate.getTime());          Date ds = new SimpleDateFormat("yyyy-MM-dd").parse(new SimpleDateFormat("yyyy-MM-dd").format(d));          SimpleDateFormat df = null;          if (d.compareTo(ds) == 0){            df = new SimpleDateFormat("yyyy-MM-dd");          }else{            df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          }          cell.setCellType(XSSFCell.CELL_TYPE_STRING);          XSSFRichTextString xssfString = new XSSFRichTextString(df.format(d));          cell.setCellValue(xssfString);          cell.setCellStyle(style);        }else if (in instanceof java.util.Date){          Date d = (Date)in;          Date ds = new SimpleDateFormat("yyyy-MM-dd").parse(new SimpleDateFormat("yyyy-MM-dd").format(d));          SimpleDateFormat df = null;          if (d.compareTo(ds) == 0){            df = new SimpleDateFormat("yyyy-MM-dd");          }else{            df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          }          cell.setCellType(XSSFCell.CELL_TYPE_STRING);          XSSFRichTextString xssfString = new XSSFRichTextString(df.format(d));          cell.setCellValue(xssfString);          cell.setCellStyle(style);        }else if (STRING.equals(type)){          cell.setCellType(XSSFCell.CELL_TYPE_STRING);          XSSFRichTextString xssfString = new XSSFRichTextString(String.valueOf(in));          cell.setCellValue(xssfString);          cell.setCellStyle(style);        }else if (in instanceof BigDecimal){          cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);          cell.setCellValue(Double.parseDouble(String.valueOf(in)));          cell.setCellStyle(style);        }else{          try{            double d = Double.parseDouble(String.valueOf(in));            //if (String.valueOf(d).equals(String.valueOf(in)) && String.valueOf(in).length() <= 11){            if (String.valueOf(in).length() <= 11){              cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);              cell.setCellValue(d);              cell.setCellStyle(style);            }else{              cell.setCellType(XSSFCell.CELL_TYPE_STRING);              XSSFRichTextString xssfString = new XSSFRichTextString(String.valueOf(in));              cell.setCellValue(xssfString);              cell.setCellStyle(style);            }            }catch (Exception e) {            cell.setCellType(XSSFCell.CELL_TYPE_STRING);            XSSFRichTextString xssfString = new XSSFRichTextString("");            cell.setCellValue(xssfString);            cell.setCellStyle(style);            LOGGER.error("excel解析:", e);          }          }      }    }            /**     * 根据类型自适应格式     * @param col     * @param row     * @param in     * @return     * @throws Exception     */    public static void type4ExcelXLS(Object in, HSSFCell cell, HSSFCellStyle style) throws Exception{      if (null == in){        cell.setCellType(HSSFCell.CELL_TYPE_STRING);        HSSFRichTextString hssfString = new HSSFRichTextString("");        cell.setCellValue(hssfString);        cell.setCellStyle(style);      }else{        in = ClobUtils.clobToString(in);        String type = in.getClass().getName();        if (INT.equals(type)){          cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);          cell.setCellValue(Double.parseDouble(String.valueOf(in)));          cell.setCellStyle(style);        }else if (LONG.equals(type) && String.valueOf(in).length() <= 11){          cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);          cell.setCellValue(Double.parseDouble(String.valueOf(in)));          cell.setCellStyle(style);        }else if (SHORT.equals(type)){          cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);          cell.setCellValue(Double.parseDouble(String.valueOf(in)));          cell.setCellStyle(style);        }else if (DATE.equals(type)) {          java.sql.Timestamp sqlDate = (java.sql.Timestamp)in;          Date d = new java.util.Date(sqlDate.getTime());          Date ds = new SimpleDateFormat("yyyy-MM-dd").parse(new SimpleDateFormat("yyyy-MM-dd").format(d));          SimpleDateFormat df = null;          if (d.compareTo(ds) == 0){            df = new SimpleDateFormat("yyyy-MM-dd");          }else{            df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          }          cell.setCellType(HSSFCell.CELL_TYPE_STRING);          HSSFRichTextString hssfString = new HSSFRichTextString(df.format(d));          cell.setCellValue(hssfString);          cell.setCellStyle(style);        }else if (in instanceof java.util.Date){          Date d = (Date)in;          Date ds = new SimpleDateFormat("yyyy-MM-dd").parse(new SimpleDateFormat("yyyy-MM-dd").format(d));          SimpleDateFormat df = null;          if (d.compareTo(ds) == 0){            df = new SimpleDateFormat("yyyy-MM-dd");          }else{            df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");          }          cell.setCellType(HSSFCell.CELL_TYPE_STRING);          HSSFRichTextString hssfString = new HSSFRichTextString(df.format(d));          cell.setCellValue(hssfString);          cell.setCellStyle(style);        }else if (STRING.equals(type)){          cell.setCellType(HSSFCell.CELL_TYPE_STRING);          HSSFRichTextString hssfString = new HSSFRichTextString(String.valueOf(in));          cell.setCellValue(hssfString);          cell.setCellStyle(style);        }else if (in instanceof BigDecimal){          cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);          cell.setCellValue(Double.parseDouble(String.valueOf(in)));          cell.setCellStyle(style);        }else{          try{            double d = Double.parseDouble(String.valueOf(in));            //if (String.valueOf(d).equals(String.valueOf(in)) && String.valueOf(in).length() <= 11){            if (String.valueOf(in).length() <= 11){              cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);              cell.setCellValue(d);              cell.setCellStyle(style);            }else{              cell.setCellType(HSSFCell.CELL_TYPE_STRING);              HSSFRichTextString hssfString = new HSSFRichTextString(String.valueOf(in));              cell.setCellValue(hssfString);              cell.setCellStyle(style);            }            }catch (Exception e) {            cell.setCellType(HSSFCell.CELL_TYPE_STRING);            HSSFRichTextString hssfString = new HSSFRichTextString("");            cell.setCellValue(hssfString);            cell.setCellStyle(style);            LOGGER.error("excel解析:", e);          }          }      }    }}

0 0
原创粉丝点击