poi操作EXCEL范例

poi操作EXCEL实例
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;

import com.pay.common.util.StringUtil;
import com.pay.XXX.Constant;

/**
 * Excel文件解析服务工具类
 
 */
public class ExcelFileUtils {
    /***/
    protected static final Logger logger = LogManager.getLogger(ExcelFileUtils.class);
    
    /**
     * 根据输入Excel文件解析出Excel文件中第一个sheet页。
     * 
     * @param ExcelFile
     * @return Sheet
     * */
    public static Sheet loadExcelSheet(final MultipartFile excelFile){
        if(excelFile != null && !StringUtil.isNull(excelFile.getName())){
            String fileName = excelFile.getOriginalFilename();
            if(fileName.lastIndexOf(".") != 0 && fileName.lastIndexOf(".") != -1){
                String suffix = fileName.substring(fileName.lastIndexOf("."));
                if(Constant.EXCEL_SUFFIX_XLSX.equalsIgnoreCase(suffix) || Constant.EXCEL_SUFFIX_XLS.equalsIgnoreCase(suffix)){
                    FileInputStream fileInputStream = null;
                    try{
                        fileInputStream = (FileInputStream)excelFile.getInputStream();
                        Workbook workBook = null;
                        if(Constant.EXCEL_SUFFIX_XLSX.equalsIgnoreCase(suffix)){
                            workBook = new XSSFWorkbook(fileInputStream);
                        }else{
                            workBook = new HSSFWorkbook(fileInputStream);
                        }
                        Sheet sheet = workBook.getSheetAt(0);
                        return sheet;
                    }catch(Exception e){
                        logger.error("Excel文件解析异常!");
                        e.printStackTrace();
                    }finally{
                        if(fileInputStream != null){
                            try{
                                fileInputStream.close();
                            }catch (IOException e){
                                // TODO Auto-generated catch block
                                logger.error("Excel文件读取数据流关闭出错!");
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
        return null;
    }
    /**
     * 获取对应Excel的Sheet页中所有记录Row中每个Cell的值。
     * <p>
     * @param Sheet 
     * @return List - 记录Row数据集 , ArrayList - 记录Row中Cell数据集
     * */
    public static List<ArrayList<String>> loadExcelRowsValues(final Sheet sheet){
        /*
         * Sheet 页中存在非标题数据记录Row
         * */
        if(sheet != null && sheet.getLastRowNum() >= 1){
            logger.info("sheet last row num = [" + sheet.getLastRowNum() + "]");
            /*
             * 从非标题行开始解析每一记录Row中数据。
             * */
            /*excel sheet 页中 行值*/
            List<ArrayList<String>> rowsValues = new LinkedList<ArrayList<String>>();
            for(int i = 1; i <= sheet.getLastRowNum(); i++){
                Row row = sheet.getRow(i);
                /*
                 * 记录Row中存在数据Cell
                 * */
                if(row != null && row.getLastCellNum() > 0){
                    logger.info("row last cell num = [" + row.getLastCellNum() + "]");
                    /*单元格值集*/
                    ArrayList<String> cellsValues = new ArrayList<String>();
                    /*
                     * 逐个字段域解析记录Row中每个字段域中值
                     * */
                    for(int j = 0 ; j < row.getLastCellNum(); j++){
                        if(row.getCell(j) != null){
                            row.getCell(j).setCellType(Cell.CELL_TYPE_STRING);
                            String cellValue = row.getCell(j).getStringCellValue().trim();
                            cellsValues.add(StringUtil.isNull(cellValue) ? Constant.EXCEL_CELL_VALUE_NULL : cellValue);
                        }else{
                            cellsValues.add(Constant.EXCEL_CELL_VALUE_NULL);
                        }
                    }
                    rowsValues.add(cellsValues);
                }
            }
            return rowsValues;
        }
        return null;
    }
    /**
     * 解析Excel文件获取解析结果。
     * <p>
     * 每个Record的记录值集。
     * 
     * */
    public static List<ArrayList<String>> getExcelCellsValue(final MultipartFile excelFile){
        if(excelFile != null){
            Sheet sheet = loadExcelSheet(excelFile);
            if(sheet != null && sheet.getLastRowNum() >= 1){
                List<ArrayList<String>>  rowsValues = loadExcelRowsValues(sheet);
                if(rowsValues != null && !rowsValues.isEmpty()){
                    return rowsValues;
                }
            }
        }
        return null;
    }
}