EXCEL2007 버전 및 그 이상의 일반적인 작업에 대한 POI 요약

6155 단어 poi-excel
열 헤더 집합을 지정하여 EXCEL 템플릿 만들기(EXCEL 템플릿을 텍스트 형식으로 초기화)
 /**
     *  Excel 
     *
     * @param headList
     * @return
     */
    public static XSSFWorkbook createWorkBook(List headList) {
        XSSFWorkbook wb = new XSSFWorkbook();
        XSSFSheet sheet = wb.createSheet(" ");
        // excel 
        XSSFCellStyle cellStyle = wb.createCellStyle();
        XSSFDataFormat dataFormat = wb.createDataFormat();
        cellStyle.setDataFormat(dataFormat.getFormat("@"));
        for(int column=0;column<=headList.size();column++){
            sheet.setDefaultColumnStyle(column,cellStyle);
        }
        buildHeader(sheet, headList);
        return wb;
    }
/**
 *  
 *
 * @param sheet
 */
private static void buildHeader(XSSFSheet sheet, List headList) {
    XSSFRow headerRow = sheet.createRow(0);
    int index = 0;
    for (String header : headList) {
        XSSFCell cell = headerRow.createCell(index, Cell.CELL_TYPE_STRING);
        cell.setCellValue(header);
        index++;
    }
}

현재 셀 내용 가져오기
   /**
     *  
     */
    public static String getCellValue(Cell cell) {
        String value = "";
        if(cell!=null){
            cell.setCellType(Cell.CELL_TYPE_STRING);
            value = cell.getStringCellValue();
        }
        return value;
    }

어떤 줄의 모든 칸에 값이 있는지 판단하다
  /**
     *  
     *
     * @param row  
     * @param cells  
     * @return
     */
    private static boolean isThereAValue(XSSFRow row, int cells) {
        for (int i = 0; i < cells; i++) {
            XSSFCell rowcell = row.getCell(i);
            String cellValue = ExcelUtils.getCellValue(rowcell);
            if (null != cellValue && !"".equals(cellValue)) {
                return true;
            }
        }
        return false;
    }

EXCEL에서 빈 행이 아닌 행 수 가져오기
 /**
     *  excel 
     *
     * @param sheet
     * @param lastRows sheet 
     * @return
     */
public static int getExcelRows(XSSFSheet sheet, int lastRows) {
    boolean isThereAValue;
    int rows = 0;
    for (int i = 0; i <=lastRows; i++) {
        XSSFRow row = sheet.getRow(i);
        if (row == null) {
            continue;
        }
        int cells = sheet.getRow(0).getLastCellNum();
        isThereAValue = ExcelUtils.isThereAValue(row, cells);
        if (!isThereAValue) {
            continue;
        }
        rows++;
    }
    return rows;
}

첫 번째 열 제목 표시줄 데이터 가져오기
 /**
     *  
     *
     * @param sheet
     * @return map key: (0 ) value  
     * @throws ExportException
     */
    private static Map loadHeader(XSSFSheet sheet) {
        Map header = new HashMap();
        int HEADER = 0;
        XSSFRow row = sheet.getRow(HEADER);
        int columns = row.getLastCellNum();
        for (int i = 0; i < columns; i++) {
            log.info(" :" + row.getCell(i).getStringCellValue());
            String value = row.getCell(i).getStringCellValue();
            if (null == value) {
                throw new RuntimeException(" !");
            }
            header.put(i, value);
        }
        return header;
    }

확인 EXCEL 템플릿에서 Workbook의 값을 List > Fabric에 넣기
 /**
     *  workbook List> 
     *
     * @param workbook
     * @return
     */
    public static List> parseExcel(Workbook workbook) {
        log.info(" excel");
        List> result = new LinkedList>();
        // sheet
        XSSFSheet sheet = (XSSFSheet) workbook.getSheetAt(0);
        if (sheet == null || sheet.getRow(0) == null) {
            return result;
        }
        int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
        log.info(" excel " + physicalNumberOfRows);
        int rows=getExcelRows(sheet,sheet.getLastRowNum());
        log.info(" excel " + rows);
        // 
        int excleRowLength = sheet.getRow(0).getLastCellNum();
        // javabean 
        String[] columnName = new String[excleRowLength];
        // 
        Map header = loadHeader((XSSFSheet) workbook.getSheetAt(0));
        for (int i = 0; i < columnName.length; i++) {
            columnName[i] = header.get(i);
        }
        for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
            XSSFRow row = sheet.getRow(rowIndex);
            if (row == null || !isThereAValue(row,sheet.getRow(0).getLastCellNum())) {
                continue;
            }
            Map map = new HashMap();
            for (int cellIndex = 0; cellIndex < columnName.length; cellIndex++) {
                XSSFCell cell = row.getCell(cellIndex);
                // java 
                if (columnName[cellIndex] != null && columnName[cellIndex].trim().length() > 0) {
                    // cell Javabean map 
                    map.put(columnName[cellIndex].trim(), getCellValue(cell));
                }
            }
            result.add(map);
        }
        return result;
    }

POI 작업 EXCEL FAQ
  • sheet.getLastRowNum() 및 sheet.getPhysicalNumber OfRows()의 차이점?getPhysicalNumber OfRows: 얻은 것은 물리적 줄 수입니다. 즉, 빈 줄이나 칸막이를 포함하지 않는 것입니다. 어떤 줄을 비우는 경우를 포함하여 excel의 유효한 물리적 줄 수를 판독하는 데 사용됩니다.getLastRowNum: 마지막 줄의 번호를 가져옵니다. (번호는 0부터) EXCEL의 줄마다 내용을 훑어보는 데 사용됩니다for (int rowIndex = 1; rowIndex <= lastRowNum; rowIndex++ ).
  • XSSFRow.getLastCellNum() 및 XSSFRow.getPhysicalNumberOfCells() 차이점?getPhysicalNumber OfCells: 비어 있지 않은 열 개수를 가져오는 것입니다 getLastCellNum: 비어 있지 않은 마지막 열을 가져오는 것은 몇 번째입니다 (번호는 1부터 excel 데이터에 비어 있는 열이 있으면 getLastCellNum을 사용해야 데이터를 완전히 읽을 수 있습니다)
  • 현재 칸의 내용을 가져옵니다. 칸의 형식이 다르기 때문에 백엔드에서 가져온 내용과 칸의 실제 내용에 차이가 있습니까?방안 1: 가져온 EXCEL 템플릿을 텍스트 형식으로 제어하고 백엔드에서 문자열을 가져오는 방식으로 셀 내용을 가져옵니다
  • 좋은 웹페이지 즐겨찾기