티스토리 뷰
안녕하세요 박스여우입니다.
최근 학교의 잔류조사 시스템 개발을 마무리 하고 있는데요, 사감선생님의 편의를 위해 조사된 결과를 엑셀 파일 형태로 출력해야 했습니다.
그래서 오늘은 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차원 배열을 많이 다뤄보셨다면 엑셀을 다루시는데 큰 어려움은 없으실 것 같습니다.
'프로그래밍 > java' 카테고리의 다른 글
JavaFX FXML과 Controller을 이용한 UI 구현 (0) | 2016.10.24 |
---|---|
Java - JavaFX 시작하기 (4) | 2016.10.13 |
java - 스레드 동기화(thread synchronization) (0) | 2016.07.23 |
java + cmd 프로세스 아이디 구하고 죽이기, cpu 사용량 구하기 (3) | 2016.06.22 |
System.out(표준 출력 스트림) Hijack, 후킹 (0) | 2016.05.16 |