POI 읽 기 Excel 패키지

POI 읽 기 Excel 에 대해 간단 한 패 키 징 을 실 시 했 습 니 다.코드 는 다음 과 같 습 니 다.
package com.aline.zkdm;

import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * POI  Excel  
 */
public class ExcelUtil {

    /**
     *      
     */
    private String formatter = "yyyy-MM-dd HH:mm:ss";
    /**
     *      
     */
    private SimpleDateFormat sdf = null;
    /**
     *     
     */
    private static ExcelUtil instance = new ExcelUtil();

    /**
     *   
     *
     * @param dateFormatter
     * @return
     */
    public static ExcelUtil getInstance(String dateFormatter) {
        if (dateFormatter != null && dateFormatter.length() != 0) {
            instance.formatter = dateFormatter;
            instance.sdf = null;
        }
        return instance;
    }

    /**
     *   cell      String
     *
     * @param cell
     * @return
     */
    public String readCellValueToString(Cell cell) {
        if (cell == null) {
            return null;
        }
        CellType type = cell.getCellType();
        switch (type) {
            case STRING:
                return cell.getStringCellValue();
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case NUMERIC:
                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    if (sdf == null) {
                        try {
                            sdf = new SimpleDateFormat(formatter);
                        } catch (Exception e) {
                            sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        }
                    }
                    return sdf.format(cell.getDateCellValue());
                }
                return String.valueOf(cell.getNumericCellValue());
            case FORMULA:
                return String.valueOf(cell.getCellFormula());
            default:
                return cell.toString();
        }
    }

    /**
     *   Excel  (2003,2007)     
     *
     * @param in
     * @return
     * @throws IOException
     */
    public Workbook readStreamToWorkBook(InputStream in) throws IOException {
        checkNull(in);
        Workbook wb = null;
        try {
            wb = new HSSFWorkbook(in);
        } catch (IOException e) {
            wb = new XSSFWorkbook(in);
        }
        return wb;
    }


    /**
     *   Excel  (2003/2007)   
     *            map  key        map value
     * 
     *
     * @param excelFile
     * @param sdf
     * @return
     * @throws IOException
     */
    public List<Map<String, String>> readToListMap(File excelFile, SimpleDateFormat sdf) throws IOException {
        checkNull(excelFile);
        return readToListMap(new FileInputStream(excelFile));
    }

    /**
     *      Sheet     List     
     *            map  key        map value
     * 
     *  :
     * a,b,c
     * 1,2,3,4
     *    4    
     *
     * @param excelStream
     * @return
     * @throws IOException
     */
    public List<Map<String, String>> readToListMap(InputStream excelStream) throws IOException {
        Workbook wb = readStreamToWorkBook(excelStream);
        Sheet sheet = wb.getSheetAt(0);
        return readSheetToListMap(sheet);
    }

    /**
     *     sheet,   List     
     *            map  key        map value
     * 
     *
     * @param sheet
     * @return
     */
    public List<Map<String, String>> readSheetToListMap(Sheet sheet) {
        List<Map<String, String>> result = new ArrayList<>(sheet.getLastRowNum());
        if (sheet == null || sheet.getFirstRowNum() == sheet.getLastRowNum()) {
            return null;
        }
        Row firstRow = sheet.getRow(sheet.getFirstRowNum());
        //      
        for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getLastRowNum(); i++) {
            Row row = sheet.getRow(i);
            Map<String, String> rowMap = new HashMap<>();
            for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
                String k = readCellValueToString(firstRow.getCell(j));
                if (k == null) {
                    continue;
                }
                rowMap.put(k, readCellValueToString(row.getCell(j)));
            }
            result.add(rowMap);
        }
        return result;
    }

    /**
     *   Excel    Sheet     List>     
     *        
     *   List            
     *   List   0     1     
     *
     * @param file
     * @return
     * @throws IOException
     */
    public List<List<String>> readToListList(File file) throws IOException {
        checkNull(file);
        return readToListList(new FileInputStream(file), true);
    }

    /**
     *   Excel    Sheet     List>     
     *   List            
     *   List   0     1     
     *
     * @param file
     * @param skipFirst        
     * @return
     * @throws IOException
     */
    public List<List<String>> readToListList(File file, boolean skipFirst) throws IOException {
        checkNull(file);
        return readToListList(new FileInputStream(file), skipFirst);
    }

    /**
     *      Sheet  ,      List>    
     *        
     *   List            
     *   List   0     1     
     *
     * @param excelStream
     * @return
     * @throws IOException
     */
    public List<List<String>> readToListList(InputStream excelStream) throws IOException {
        Workbook wb = readStreamToWorkBook(excelStream);
        Sheet sheet = wb.getSheetAt(0);
        return readSheetToListList(sheet, true);
    }

    /**
     *      Sheet  ,      List>    
     *   List            
     *   List   0     1     
     *
     * @param excelStream
     * @param skipFirst          
     * @return
     * @throws IOException
     */
    public List<List<String>> readToListList(InputStream excelStream, boolean skipFirst) throws IOException {
        Workbook wb = readStreamToWorkBook(excelStream);
        Sheet sheet = wb.getSheetAt(0);
        return readSheetToListList(sheet, skipFirst);
    }

    /**
     *       Sheet  ,      List>    
     *   List            
     *   List   0     1     
     *
     * @param sheet
     * @param skipFirst
     * @return
     * @throws IOException
     */
    public List<List<String>> readSheetToListList(Sheet sheet, boolean skipFirst) {
        if (sheet == null) {
            return null;
        }
        List<List<String>> result = new ArrayList<>();
        int start = skipFirst ? sheet.getFirstRowNum() : sheet.getFirstRowNum() + 1;
        for (int i = start; i <= sheet.getLastRowNum(); i++) {
            Row row = sheet.getRow(i);
            List<String> rowList = new ArrayList<>(row.getLastCellNum() - row.getFirstCellNum());
            for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
                rowList.add(readCellValueToString(row.getCell(j)));
            }
            result.add(rowList);
        }
        return result;
    }

    /**
     *        Sheet  
     *    List          Sheet   
     *    List          
     * Map           ,key           value          
     *
     * @param file
     * @return
     * @throws IOException
     */
    public List<List<Map<String, String>>> readAllSheetToListMap(File file) throws IOException {
        checkNull(file);
        return readAllSheetToListMap(new FileInputStream(file));
    }

    /**
     *         Excel        List>>
     *    List          Sheet   
     *    List          
     *   List   0     1     
     *
     * @param excelStream
     * @return
     * @throws IOException
     */
    public List<List<Map<String, String>>> readAllSheetToListMap(FileInputStream excelStream) throws IOException {
        Workbook sheets = readStreamToWorkBook(excelStream);
        List<List<Map<String, String>>> result = new ArrayList<>();
        int numberOfSheets = sheets.getNumberOfSheets();
        for (int i = 0; i < numberOfSheets; i++) {
            Sheet sheet = sheets.getSheetAt(i);
            result.add(readSheetToListMap(sheet));
        }
        return result;
    }

    /**
     *         Excel       
     *      
     *    List          Sheet   
     *    List          
     *             ,key           value          
     *
     * @param excelFile
     * @return
     */
    public List<List<List<String>>> readAllSheetToListList(File excelFile) throws IOException {
        return readAllSheetToListList(excelFile, true);
    }

    /**
     *         Excel       
     *    List          Sheet   
     *    List          
     *             ,key           value          
     *
     * @param excelFile
     * @param skipFirst        
     * @return
     */
    public List<List<List<String>>> readAllSheetToListList(File excelFile, boolean skipFirst) throws IOException {
        checkNull(excelFile);
        return readAllSheetToListList(new FileInputStream(excelFile), skipFirst);
    }

    /**
     *         Excel       
     *      
     *    List          Sheet   
     *    List          
     *             ,key           value          
     *
     * @param excelStream
     * @return
     */
    public List<List<List<String>>> readAllSheetToListList(FileInputStream excelStream) throws IOException {
        return readAllSheetToListList(excelStream, true);
    }

    /**
     *         Excel       
     *    List          Sheet   
     *    List          
     *             ,key           value          
     *
     * @param excelStream
     * @param skipFirst          
     * @return
     */
    public List<List<List<String>>> readAllSheetToListList(FileInputStream excelStream, boolean skipFirst) throws IOException {
        checkNull(excelStream);
        Workbook sheets = readStreamToWorkBook(excelStream);
        List<List<List<String>>> result = new ArrayList<>();
        int numberOfSheets = sheets.getNumberOfSheets();
        for (int i = 0; i < numberOfSheets; i++) {
            result.add(readSheetToListList(sheets.getSheetAt(i), skipFirst));
        }
        return result;
    }

    private void checkNull(Object o) {
        if (o == null) {
            throw new IllegalArgumentException("read file can not empty");
        }
    }
}


호출:
public class Main{
	public static void main(String[] args) throw Exception{
		//   null           :yyyy-MM-dd HH:mm:ss
		ExcelUtil util = ExcelUtil.getInstance(null);
		File file = new File("test.xls");
		//                    key - value  
		List<Map<String, String>> rsMapList = util.readSheetToListMap(file);
		//          List
		//      
		// List> rsListListSkipFirst = util.readToListList(file);	
		//      
		List<List<String>> rsListListNoSkip = util.readToListList(file, false);	
		//           
		//      
		// List>> rsAllListList = readAllSheetToListList(file);
		//       
		List<List<List<String>>> rsAllListList = readAllSheetToListList(file, false);
		//              ListMap  
		List<List<Map<String, String>>> rsAllListMap = readAllSheetToListMap(file);
		
	}
}

좋은 웹페이지 즐겨찾기