티스토리 뷰

안녕하세요 박스여우입니다.

최근 학교의 잔류조사 시스템 개발을 마무리 하고 있는데요, 사감선생님의 편의를 위해 조사된 결과를 엑셀 파일 형태로 출력해야 했습니다.


그래서 오늘은 Java에서 엑셀 파일(xls, xlsx)을 읽고 쓰는 방법을 소개해 드리려고 합니다.



Apache POI

우선 엑셀파일을 텍스트 파일처럼 읽고 쓸수는 없습니다. 때문에 Java에서 엑셀파일을 다루기 위해 Apache POI 라이브러리를 사용해야 합니다.


Apache POI 라이브러리를 다운받기 위해서는 https://poi.apache.org/download.html 요 주소로접속한 뒤에 스크롤을 내리다 보면

위와같이 Binary Distribution 항목이 있습니다. 여기에서 빨간색 부분(poi-bin-3.15-beta2-...)을 클릭!


그 다음 스크롤을 또 내리다 보면 HTTP 항목이 나오게 됩니다. 위 링크를 통해 라이브러리를 다운받아 주세요. 네 가지 링크 모두 같은 링크이니 아무거나 선택하셔도 됩니다.


다운받은 압축파일을 열어보면 위와 같이 .jar확장자로 된 라이브러리 들이 있는데요, 빨간색 네모 안에 있는 라이브러리들은 무조건 적용 해 주셔야 합니다.


만약 xlsx를 다루고 싶으시다면 초록색 네모로 된 ooxml-lib 폴더의 라이브러리도 적용해 주시면 됩니다.




 본격적인 엑셀 다루기

엑셀을 파싱하기 먼저 아래 사진을 통해 엑셀의 구조(용어)를 익히고 가면 좋을 것 같습니다. 저 같은 경우 엑셀의 용어를 잘 몰라 햇갈리는 부분이 많이 발생했거든요. 하지만 사진보다는 직접 엑셀을 다뤄보신다면 더할나위 없이 좋을것 같습니다.



엑셀 파일의 셀 값 출력하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
        try {
            FileInputStream fis = new FileInputStream("불러올 파일 경로/이름.xlsx");
            HSSFWorkbook workbook = new HSSFWorkbook(fis);
            HSSFSheet sheet = workbook.getSheetAt(0); // 해당 엑셀파일의 시트(Sheet) 수
            int rows = sheet.getPhysicalNumberOfRows(); // 해당 시트의 행의 개수
            for (int rowIndex = 1; rowIndex < rows; rowIndex++) {
                HSSFRow row = sheet.getRow(rowIndex); // 각 행을 읽어온다
                if (row != null) {
                    int cells = row.getPhysicalNumberOfCells();
                    for (int columnIndex = 0; columnIndex <= cells; columnIndex++) {
                        HSSFCell cell = row.getCell(columnIndex); // 셀에 담겨있는 값을 읽는다.
                        String value = "";
                        switch (cell.getCellType()) { // 각 셀에 담겨있는 데이터의 타입을 체크하고 해당 타입에 맞게 가져온다.
                        case HSSFCell.CELL_TYPE_NUMERIC:
                            value = cell.getNumericCellValue() + "";
                            break;
                        case HSSFCell.CELL_TYPE_STRING:
                            value = cell.getStringCellValue() + "";
                            break;
                        case HSSFCell.CELL_TYPE_BLANK:
                            value = cell.getBooleanCellValue() + "";
                            break;
                        case HSSFCell.CELL_TYPE_ERROR:
                            value = cell.getErrorCellValue() + "";
                            break;
                        }
                        System.out.println(value);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
cs


엑셀 파일을 생성하여 셀에 값 삽입하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
        HSSFWorkbook workbook = new HSSFWorkbook(); // 새 엑셀 생성
        HSSFSheet sheet = workbook.createSheet("시트명"); // 새 시트(Sheet) 생성
        HSSFRow row = sheet.createRow(0); // 엑셀의 행은 0번부터 시작
        HSSFCell cell = row.createCell(0); // 행의 셀은 0번부터 시작
        cell.setCellValue("테스트 데이터"); //생성한 셀에 데이터 삽입
        try {
            FileOutputStream fileoutputstream = new FileOutputStream("저장할 경로/이름.xlsx");
            workbook.write(fileoutputstream);
            fileoutputstream.close();
            System.out.println("엑셀파일생성성공");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("엑셀파일생성실패");
        }
cs


위 두 가지를 잘 응용하시면 기존에 있던 엑셀파일을 수정하시거나 새로운 엑셀파일을 생성할 수 있습니다.

아마 2차원 배열을 많이 다뤄보셨다면 엑셀을 다루시는데 큰 어려움은 없으실 것 같습니다.



댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함