JAVA/SPRINGBOOT
Apache POI 아파치포이로 엑셀 DB업로드, DB 엑셀저장
인천쓰
2024. 7. 23. 18:35
반응형
Apache POI는 Java에서 Microsoft Excel, Word, PowerPoint 및 기타 파일 형식을 읽고 쓰는 데 사용되는 라이브러리입니다. 이 블로그에서는 주로 Apache POI를 사용하여 Excel 파일을 처리하는 데 필요한 정보와 기법을 다룹니다. Apache POI를 사용하는 데 필요한 모든 중요한 개념과 기술을 다루겠습니다.
Apache POI의 주요 구성 요소
- POI-HSSF: HSSF는 Horrible Spreadsheet Format의 약자로, POI의 일부로서 97-2007 버전의 Excel (.xls) 파일을 처리하는 데 사용됩니다.
- POI-XSSF: XSSF는 XML Spreadsheet Format의 약자로, 2007 이상 버전의 Excel (.xlsx) 파일을 처리하는 데 사용됩니다.
- POI-SS: 공통적인 스프레드시트 작업을 위한 공통 API입니다. HSSF와 XSSF 모두에 적용됩니다.
POI를 사용하여 Excel 파일을 읽고 쓰기
public static void main(String[] args) throws IOException {
try (InputStream inp = new FileInputStream("workbook.xlsx")) {
Workbook wb = new XSSFWorkbook(inp);
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
for (Cell cell : row) {
printCellValue(cell);
}
}
}
이런식으로 파일 인풋 스트림으로 데이터를 가져오면된다.
필자는 멀티파일로 파일을가져와 저렇게 가져오고 엑셀을쓰기위해 Workbook wb = new XSSFWorkbook(inp); xssf로 썻다 xssf는 2007년이상 엑셀을 다룰떄쓰니 보통 xssf로 쓰면된다
그후 포문으로 셀을 풀어주면된다 .. 보통은 row를 풀어주어 데이터를 getcell로 받아주어 저장할 객체에 넣어주면된다.
매우쉽죠?
그리고 엑셀의 데이터를 나의 db에 저장해줄때는 반대로 생각해서 해주면된고 마지막에
try (OutputStream fileOut = new FileOutputStream("workbook.xlsx")) {
wb.write(fileOut);
}
이런식으로 파일을 쓰면된다 그리고 HttpServletResponse이걸로받 getoutputStreaam으로 파일을 밖으로 내주엇다
추가적으로 확인해야하는것들이다.
- 셀 유형 확인:
- Excel 셀은 다양한 유형을 가질 수 있습니다. STRING, NUMERIC, BOOLEAN, FORMULA, BLANK 등이 있으며, getCellType 메서드를 사용하여 셀의 유형을 확인하고 적절한 처리를 해야 합니다.
- 날짜 처리:
- NUMERIC 유형의 셀 중에서 날짜를 포함할 수 있습니다. DateUtil.isCellDateFormatted 메서드를 사용하여 셀의 값이 날짜인지 확인할 수 있습니다.
- 자동 크기 조정:
- 열 너비를 자동으로 조정하려면 sheet.autoSizeColumn(columnIndex) 메서드를 사용할 수 있습니다.
- 에러 핸들링:
- 파일 입출력 작업은 예외가 발생할 수 있으므로, 적절한 예외 처리를 추가하는 것이 중요합니다. 예를 들어, 파일이 없거나 읽기/쓰기 권한이 없는 경우를 대비해야 합니다.
- 리소스 관리:
- Apache POI 객체는 많은 리소스를 사용할 수 있으므로, Workbook, Sheet, Row, Cell 객체를 사용한 후에는 적절히 리소스를 해제해야 합니다. try-with-resources 구문을 사용하여 자동으로 자원을 해제할 수 있습니다.
- Excel 파일 형식:
- .xls 파일을 처리할 때는 HSSFWorkbook을 사용하고, .xlsx 파일을 처리할 때는 XSSFWorkbook을 사용합니다. 파일 형식에 따라 적절한 클래스를 사용해야 합니다.
데이터 입출력 작업을 효율적으로 수행하기위해 쓴다생각하면된다!
반응형