반응형
▶ 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 |