Java

ApachePOI에 대하여

nan2 2022. 2. 16. 16:03
반응형

▶ ApachePOI 주요 클래스

- HSSFWorkbook, HSSFSheet .. -> Excel 97 - 2007 버전의 파일을 포맷
- XSSFWorkbook, XSSFSheet .. -> Excel 2007 이상 파일을 포맷
- Workbook : 1개의 엑셀 파일
- Sheet : Workbook의 시트
- Row, Cell : Sheet 안의 행과 열

 

 

▶ ApachePOI  사용하여 Excel 파일 읽기

 

1. FileInputStream 객체 이용

FileInputStream fis = new FileInpustStream(new File("{파일위치}"));
//Excel 2007 버전 이상
XSSFWorkbook workbook = new XSSFWorkbook(fis);
//Excel 97 ~ 2003 버전
HSSFWorkbook workbook = new HSSFWorkbook(fis);

 

2. File 객체 이용

Workbook workbook = WorkbookFactory.create(new File("{파일위치}"));

 

3. OPCPackage 이용 (Excel 2007 버전 이상만 가능)

OPCPackage opcPackage = OPCPackage.open(new File("{파일위치}"));
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);

 

 

 

▶ ApachePOI로 엑셀 파일 생성하기

Workbook 생성 → Sheet 생성 → Row 생성 → Cell 생성 (1개의 Row에 여러개의 Cell 존재할 수 있음)

* Row 생성 → Cell 생성 부분은 반복됨

public class createExcel {
	public String filePath = "{파일경로}"
    public String fileNm = "{엑셀파일명}.xlsx"
    
    public static void main(String[] args){
    	//엑셀파일 생성
        XSSXWorkbook workbook = new XSSXWorkbook();
        
        //엑셀파일 내에 시트 생성
        Sheet sheet = workbook.createSheet("{해당시트명}");
		
        int rownum = 0;
        int cellnum = 0;
        
        //cell 스타일 지정
        CellStyle headerStyle = workbook.createCellStyle();
        headerStyle.setBorderTop(BorderStyle.THIN);
        headerStyle.setBorderBottom(BorderStyle.THIN);
        headerStyle.setBorderLeft(BorderStyle.THIN);
        headerStyle.setBorderRight(BorderStyle.THIN);
        headerStyle.setAlignment(HorizontalAlignment.CENTER);
        ...
        
        //시트에 넣을 데이터를 가져옴
        
        //데이터의 수만큼 반복문으로 row 생성
        for () {
			Row row = sheet.createRow(rownum++);
            ...
            //이중반복문을 이용하여 cell 생성
            for () {
            	Cell cell = row.createCell(cellnum++);
                cell.setCellStyle(headerStyle);
                cell.setCellValue({cell에 들어갈 값});
            }
        }
        
        try {
        	FileOutputStream fos = new FileOutputStream(new File(filePath, fileNm));
            workbook.write(fos);
            fos.close();
        } catch (IOException e) {
			e.printStackTrace();
		}
    }
}

 

 

 

▶ ApachePOI로 엑셀 파일 읽기

읽을 엑셀 파일을 사용하여 Workbook 인스턴스 생성 → 해당 workbook에 원하는 sheet를 가져옴 → sheet내에서 읽고자 하는 행 번호를 지정 → row에 있는 모든 cell 순회하면서 읽음

 

public class readExcel {
	public String filePath = "{파일경로}"
    public String fileNm = "{엑셀파일명}.xlsx"
    
    public static void main(String[] args){
    	try {
        	FileInputStream fis = new FileInputStream(new File(filePath, fileNm));
            
            //읽어들인 엑셀파일(fis)로 workbook 인스턴스 생성
            XSSFWorkbook workbook = new XSSXWorkbook(fis);
            
            //workbook의 첫 번째 sheet 가져옴
            XSSFSheet sheet = workbook.getSheetAt(0);
            //workbook의 시트명으로 시트 가져오기
            XSSFSheet sheet = workbook.getSheet("{시트명}");
            //sheet 모두 가져오고싶을 경우
            for (Integer sheetNum : workbook.getNumberOfSheets()){
            	XSSFSheet sheet = workbook.getSheetAt(sheetNum);
            }
            
            //모든 row 조회
            Iterator<Row> ri = sheet.iterator();
            while(ri.hasNext()){
            	Row row = ri.next();
                
                //각 row의 cell 조회
                Iterator<Cell> ci = sheet.iterator();
                while(ci.hasNext()){
                	Cell cell = ci.next();
                    
                    //cell의 값 가져오기
                    switch (cell.getCellType()){
                    	case NUMERIC:
                        	...
                            break;
                        case STRING:
                        	...
                            break;
                        ...
                    }
                }
                System.out.println();
            }
            fis.close();
        } catch (IOException e) {
			e.printStackTrace();
		}
    }
}

 

반응형

'Java' 카테고리의 다른 글

System.getProperty() 란?  (0) 2022.03.30
[Java] Java8 Stream 사용법  (0) 2022.03.29
Java.util.Calendar에 대하여  (0) 2022.02.04
Java 8 Stream 에 대하여  (0) 2022.01.20
java.util.Arrays에 대하여  (0) 2022.01.20