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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值