SpringMVC操作Excel

POI操作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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值